2012-05-09 17 views
2

ウィンドウにビットマップを描画しようとしています。私はビットマップに1ビットに対応するピクセルを描画する必要があります。 0ビットに対応するものはそのまま残すものとする。私はこのようなコードを使用しています:Xlib - ビットマップの設定されたビットのみをウィンドウに描画します。

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); 

は(はい、私は私のような直接指定する色はちょうど間違っていることを知っているが、それは今の私にとってはOKです)。

明らかに、ビットマップの0ビットは背景色(黒色)で描画されます。私は彼らがまったく描かれないようにしたい。それを実現するための最良のアプローチは何ですか?マスクなどを指定する方法はありますか?

答えて

3

まず、非透過ビットマップの場合、ビットマップデータから完全奥行き画像を作成する必要はありません。 1ビットのピックスマップを作成し、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); 
関連する問題