[Xcb] Displaying DIBs using xcb-util/xcb

Peter Harris pharris at opentext.com
Thu Jul 16 15:01:20 PDT 2009

Jeetu Golani wrote:
>> XCB/util does provide image conversion helpers that will change depth
>> and swap byte orders as necessary. What it does not do is handle any
>> sort of palette (depth 4 or depth 8 DIBs drawn onto a TrueColor
>> screen, or TrueColor DIBs drawn to a PseudoColor screen).
> Would appreciate if you could tell me which helper functions would help me 
> change depth and swap byte orders.
> Is there an example someone could point me towards using the 
> xcb_create_pixmap_from_bitmap_data function?

You don't want xcb_create_pixmap_from_bitmap_data unless your DIB is
depth-1 (bitmap always means 1-bit in X speak; we use pixmap if there
are more colours).

Instead, you probably want xcb_image_create to create an xcb_image_t
with your particular format, and xcb_image_native to convert it to the X
server's format.

> The documentation suggests it needs the bitmap data in xbm format which I'm 
> assuming it needs a basic header of width height followed by bitmap data.

Actually this function creates the header from the width and height you
pass in (and assumes LSByteFirst, LSBitFirst, 8-bit unit, 8-bit
padding). The data block is just the raw image bits.

Same for xcb_image_create (except without the assumptions; you have to
pass in your bit order, byte order, etc, in addition to width and height).

For a (relatively slowly executing) example, you could look at
test_formats.c in the xcb/util source tree.

I note that xcb/util does not support RGB mask conversion. Contributions
in this area would be much appreciated.

> Would appreciate if someone can give me more information of this format for 
> colour pixmaps say 32bpp. I also wonder that in a DIB information is stored 
> in the order Blue, Green, Red intensities....

Not always. (See BI_BITFIELDS in the DIB docs)

> is it the same for an X Pixmap 
> or is it reversed?

It is the same (ie. it is not always RGB or BGR - it can be either, so
you have to support conversion).

> Since I don't need any hard core conversion between different formats and 
> simply want to display a DIB to X using XCB I'm averse to using ImagicMagick 
> or a complex library.

DIBs really are complex. They can even contain compressed data (PNG or
JPEG) sometimes. If you "just" want to display a DIB using XCB, you
probably want to narrow your requirements to "Just display TrueColor
BI_RGB DIBs to TrueColor X servers".

> I'll go through the xli software though I think it 
> would rely on xlib and I wonder if the format used would be different than 
> what the xcb/xlib functions would use.

Xlib and xcb use the same formats. xcb_image_create_native should take
data in the same format as XCreateImage.

Peter Harris
               Open Text Connectivity Solutions Group
Peter Harris                    http://www.opentext.com/connectivity
Research and Development        Phone: +1 905 762 6001
pharris at opentext.com            Toll Free: 1 877 359 4866

More information about the Xcb mailing list