2012-05-09 4 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); 
관련 문제