freetype
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Freetype] Windows code displaying garbage - any help?


From: Jason C. Weaver
Subject: Re: [Freetype] Windows code displaying garbage - any help?
Date: Thu, 12 Jun 2003 11:38:11 -0700 (PDT)

Peter-

Thanks for taking the time to respond with such a well-written, full-of-info 
note.  I really
appreciate it and it has given me some good places to work on.  And, yes, you 
are exactly correct
- some of your code is in what I had posted (along with other posted code I 
mangled together in a
Frankenstein-ist way!)  In case I stepped on any toes, I apologize.  My 
intention was not to sell
this off as my own code.  I had collected it all by reviewing the list history 
in hopes of
answering my questions without the need to post to the list and bug anyone.  :)

I finally did get a function working that shows a char on the screen as a 
Windows BMP, with a
small amount of help from the Paul (the grief-giver).  Thanks again for 
pointing me in the right
direction, Paul.  I was close but Paul gave me the key piece I was missing - to 
use
face->glyph->bitmap.pitch when calculating the offset into 
face->glyph->bitmap.buffer.

Let me digest all your suggestions and hopefully get this working.  Again, 
thank you very much for
your detailed suggestions.  I will post my final working code (eventually) so 
that the next person
who comes to the group with this question can find the answer the same place I 
orignally looked -
in the newgroup digest and save everyone from having this converation again.  ;)
Chris  (aka Jason, BTW)




--- Peter Montgomery <address@hidden> wrote:
> Jason,
> 
> I was looking through your code when I suddenly realized that part of it
> was mine!  I recognized my macro, the comment about padding, and my
> coding and variable naming style.  I hunted through my sent email and
> found the message I posted to this list regarding making a Windows BMP
> from a FreeType bitmap.  Because of this, I realized I better jump in a
> see what I can do.
> 
> 1 - Have you tried saving the bitmap that FreeType generates and loading
> it into a Paint Program as a raw image?  I find this sometimes help to
> make sure that the data you have is formatted the way you think it is.
> Many paint programs let you load a raw image where there is no header,
> and you manually tell it the dimensions and the number of channels.
> 
> 2 - You mention that it's "much bigger than you expected."  How big did
> you expect it to be?  I can't even find the code where you set the size
> of the FreeType bitmap.  Is this all the code or just a part of it?
> 
> 3 - Where do you actually render the font?  I'm not a FreeType stud (I
> basically got it working in my app and haven't touched it since) but in
> looking over my code, there is a call to "FT_Load_Glyph( )" which does
> the actual rendering of the font letter.  I find no such call in your
> code.
> 
> 4 - You say you want to render at 300, 300.   The way to do this is to
> render the font into the FreeType bitmap at offset 0,0 and then BLT the
> bitmap into the window at 300,300.  It appears that you are rendering at
> 300, 300 (e.g. the calls to "pen_x = 300;" and "pen_y = 300;") and then
> BLTing at 300, 300 as well.
> 
> 4 - Are you rendering aliased or non-aliased fonts?  You are creating a
> Windows BMP that with a single channel of 8 bits per pixel, but you are
> creating a color palette that has only two entries.  A two entry palette
> implies aliased font rendering.  I assume that this:
> 
> for( int h = 0; h < 2; h++ )
>     {
>         i.bmiColors[h].rgbBlue   = h;
>         i.bmiColors[h].rgbGreen  = h;
>         i.bmiColors[h].rgbRed    = h;
>     }
> 
> is the code where you create the palette.  Making things worse, you are
> creating a palette with the values of 0 and 1, which would make for a
> very dark image.  If you re-read my original post, you'll see that I
> say, "Having said all of that, remember that even though you view it is
> a B&W image, Windows views it as a 256 color image.  This means you'll
> need to create a palette with RGB entries that go from 0 to 255."
> 
> 5 - Assuming you are rendering anti-aliased fonts, then FreeType returns
> a B&W image that has a single channel with 8 bits per pixel.  Because of
> this, the "easiest" way to view it is to create a palletted BMP (as
> described above) rather than copying the data into a true RGB image.
> However, your BMP header is a bit of a mess as it is describing some
> sort of half palette/half RGB image.  You set "biClrUsed" to zero, but
> this implies an image with no palette.  Here's some info on the BMP
> spec:
> 
> ----------------------
> biClrUsed Specifies the number of color indexes in the color table
> actually used by the bitmap. If this value is 0, the bitmap uses the
> maximum number of colors corresponding to the value of the biBitCount
> field.
> ----------------------
> 
> You need to create a palette with 256 entries and specify 256 for the
> "biClrUsed" member of the structure.
> 
> 6 - You do a "CreateDIBSection" call and pass the parameter
> "DIB_RGB_COLORS".  This means you are creating a BMP with no palette,
> but you NEED a palette to get an image that displays properly.  You need
> to pass "DIB_PAL_COLORS" instead.
> 
> In general, things are a bit of a mess.  So, here's my recommended plan
> of action:
> 
> 1 - Before you do anything else, do what I say at the top of this
> message.  Either tweak your code or write a new (simple) app that
> renders a FreeType bitmap into a file (as a stream of rendered bytes)
> and then use a paint program to load it as a raw image.
> 
> 2 - Re-read the BMP spec since it seems that you are not fully
> comprehending all the details of the file format.  It's a pain, but you
> need to dot your "i"s and cross you "t"s to get a properly formatted BMP
> that will work.
> 
> 3 - Someone suggested that you manually create a BMP and BLT that first.
> Do it.  His suggestion to create a square is a good one in that you can
> write some simple code to draw two horizontal lines and then a loop to
> create the verticals.  Make sure that the square is smaller than your
> entire BMP so that you can check to see if it is centered properly.
> 
> 4 - Make the manually created image SMALL!  A BMP that's 10 X 10 pixels
> with an 8 X 8 square in it should do the trick.  This way you can look
> at the values in the debugger and see that they are correct if it
> doesn't BLT as you expect.  With regards to the guy who gave you grief,
> regardless of how he said it, his basic point is correct - get into the
> debugger and check to make sure the image is what you think it is.
> 
> 5 - Once you KNOW that's working, then start working on converting a
> FreeType image into a BMP image and BLT'ing it to screen.
> 
> Tackle the job in small steps where you can verify that each step is
> working before proceeding on to the next.  It seems to me that you are
> not intimately familiar with Windows BMP images and the MANY
> idiosyncrasies they have.  You need to get familiar with them before you
> can be confident that your code will ever work properly.
> 
>     Thanks,
>     PeterM
> 
> 
> 
> _______________________________________________
> Freetype mailing list
> address@hidden
> http://www.freetype.org/mailman/listinfo/freetype


__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to Outlook(TM).
http://calendar.yahoo.com



reply via email to

[Prev in Thread] Current Thread [Next in Thread]