how to display a XImage with 16bits depth in a drawable with a depth of 24bits ?

Glynn Clements glynn at
Fri Feb 27 13:26:51 PST 2009

hd wrote:

> I my app, I receive a raw image in 16 bits depth.
> My defaut visual have a depth of 24 bits (and all other Visual have 24 
> or 32bits depth on my X server).
> To display the bitmap I try to create an XImage with XCreateImage() and 
> display it with XPutImage().
> But X displays a "bad match" error
> If I try to display a "raw image" with the same depth (24bits) as the 
> visual (24bits), my app works.
> Question : XImage APIs (XCreateImage() / XPutImage() / ...) can convert 
> 'on the fly' the depth of the bitmap to match the visual depth
> or must I convert myself the raw bitmap to match the visual depth ? 
> (convert each pixel from 16bits to 24 bits)

You must convert yourself, or use a higher-level interface. The core X
protocol doesn't do format conversions.

If you want the conversion to be done in hardware, look at OpenGL or
XRender. It's implementation-dependent whether either of these
supports a specific format (other than 24-bit RGB), so you still need
to provide a software conversion.

Glynn Clements <glynn at>

More information about the xorg mailing list