Sign in to follow this  
RamonG

Save FreeType bitmap to file

Recommended Posts

RamonG    106

I've been playing around with FreeType to render text in OpenGL/DirectX. For debugging purposes, I'm wanting to render glyphs to a file (bmp, png, ect), so that I can pack them together as a font sprite sheet. To do this I'm using FreeImage. I'm creating a FreeImage bitmap via the FreeImage_ConvertFromRawBits function. Since FreeType generates 8 bit glyphs, I'm passing in 0 for the mask parameters for FreeImage_ConvertFromRawBits. See code below.

/* Initialize FreeType */
/* Create Face object */
/* Set character size */

int charCode = (int)'a';
int error = FT_Load_Char(face, charCode, FT_LOAD_RENDER);

/* Check for errors */

/* Initialize FreeImage */

int bpp = 8;
int width = face->glyph->bitmap.width;
int height = face->glyph->bitmap.rows;
int pitch = face->glyph->bitmap.pitch;
unsigned char* buffer = face->glyph->bitmap.buffer;
FIBITMAP* dib = FreeImage_ConvertFromRawBits(buffer, width, height, pitch, bpp, 0, 0, 0);

/* Check for errors */

FreeImage_Save(FIF_BMP, dib, "Glyph.bmp");

The issue is that the image comes out looking weird. You can kind of tell it looks like a glyph, but it's all messed up. If I try and save the image as a png, the image is still all messed up, but with random colors everywhere. I can't seem to find an example of saving a FreeType bitmap to an image file anywhere. Thanks!

Share this post


Link to post
Share on other sites
BitMaster    8651
I'm not very proficient in FreeType but from glancing at the tutorial I would say you need to call FT_Render_Glyph:

The field face?>glyph?>format describes the format used for storing the glyph image in the slot. If it is not FT_GLYPH_FORMAT_BITMAP, one can immediately convert it to a bitmap through FT_Render_Glyph.

Share this post


Link to post
Share on other sites
mmakrzem    1036

I wrote an application (http://www.marekknows.com/phpBB3/viewtopic.php?t=862) that exports FreeType data out to a RAW file format, and also an internal file format used by my game engine.

 

To save a raw file you can just write out each pixel directly from the glyph->bitmap.buffer.  Give the file name a .raw extension and then open it in Photoshop.  Photoshop will ask you for the dimensions of the file so that it can organize the pixels correctly.  Give it a try!

Edited by MarekKnows.com

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this