Xlib - 在窗口上仅绘制位图的设置位

时间:2012-05-09 09:31:15

标签: c linux x11 xlib

我正在尝试在窗口上绘制位图。我只需要在位图中绘制对应于1位的像素;对应于0位的那些应保持不变。我正在使用这样的代码:

XImage *image;
uint8_t bitmap[8192]; /* 256 x 256 / 8 */

memset(bitmap, 0xaa, sizeof(bitmap));

XSetForeground(g_display, g_gc, 0x000000ff);
XSetBackground(g_display, g_gc, 0x00000000);

image = XCreateImage(g_display, g_visual, 1, XYBitmap,
    0, (char *)bitmap, 256, 256, 32, 0);
XPutImage(g_display, g_wnd, g_gc, image, 0, 0, 10, 10, 255, 255);
XFree(image);

(是的,我知道像我这样直接指定颜色是错的,但现在对我来说没问题。)

显然,位图的0位用背景颜色绘制(黑色,即)。我希望他们不被吸引。实施该方法的最佳方法是什么?有没有办法指定面具或什么?

1 个答案:

答案 0 :(得分:3)

首先,对于非透明位图,您无需从位图数据创建全深度图像。创建一位像素图并使用XCopyPlane

对于透明位图,您需要操纵GC的剪辑蒙版。

Pixmap bitmap;
...; /* create 1-bit-deep pixmap */
XSetClipMask(display, gc, bitmap);
XSetClipOrigin(display, gc, x, y);
/* 1-bits of the bitmap are filled with the foreground color,
   and 0-bits are left intact */
XFillRectangle(display, window, gc, x, y, width, heiht);