need help with freetype + xlib.

Glynn Clements glynn at gclements.plus.com
Tue Jun 18 10:21:19 PDT 2013


First Last wrote:

> Hi, I try to use freetype with xlib, I , I need to pass a char type
> array (RGBA/pixel) to a xlib function.
> 
> from freetype I got :
> 
>   face->glyph->bitmap.pixel_mode = 2
> so if I understood corectly in face->glyph->bitmap.buffer datas are stored in gray level.
>   face->glyph->bitmap.rows=16
>   face->glyph->bitmap.width=8
>   face->glyph->bitmap.pitch=8
> 
> so I guess,  length of face->glyph->bitmap.buffer = 
> 1(gray lvl)*16(width)*8(rows)=128 unsigned chars, right ?

Right answer, wrong reasoning; width should be replaced by pitch. The
two values may differ if there is padding between lines.

> then I create an array of char for xlib from face->glyph->bitmap.buffer
> 
>   for(i=0;i<128;i++){                                            
>     Xdata[4*i]     = face->glyph->bitmap.buffer[i];
>     Xdata[4*i+1] = face->glyph->bitmap.buffer[i];
>     Xdata[4*i+2] = face->glyph->bitmap.buffer[i];
>     Xdata[4*i+3] = 255;                                        
>    }                                                                       
> and I try to create a XImage :
>   ximage = XCreateImage(display, DefaultVisual(display,0), 24, ZPixmap, 0,                           
>                                         &Xdata[0], 8/*rows*/, 16/*width*/, 32/*RGBA*/, 8/*pitch??*/);


The last argument (bytes_per_line) should be 32 (8 pixels wide at 4
bytes per pixel).

-- 
Glynn Clements <glynn at gclements.plus.com>


More information about the xorg mailing list