2014-10-13 1 views
2

XGetImage를 사용하여 OpenGL 윈도우의 픽셀을 읽습니다. 반환 된 XImage는 24 비트의 깊이를 보여 주지만, OpenGL 컨텍스트에는 반환 할 알파 값이 있습니다. XGetImage에서 32 비트 XImage를 가져 오는 방법이 있습니까? 아니면 X가 이미 이미지를 24 비트로 병합합니까?XGetImage는 32 비트 깊이의 XImage를 반환합니까?

함수 호출 :

::XImage *winImage = XGetImage(dpy_i->dpy, wnd_i->wnd, 
    x, y, width, height, 0xffffffff, ZPixmap); 

GDB 출력 :

(gdb) print *winImage 
$2 = {width = 640, height = 512, xoffset = 0, format = 2, 
data = 0x7fffe72fd010 "\377\377\377", byte_order = 0, 
bitmap_unit = 32, bitmap_bit_order = 0, bitmap_pad = 32, 
depth = 24, bytes_per_line = 2560, bits_per_pixel = 32, 
red_mask = 16711680, green_mask = 65280, blue_mask = 255, 
obdata = 0x0, f = {create_image = 0x7ffff4b67810 <XCreateImage>, 
destroy_image = 0x7ffff4b665b0, get_pixel = 0x7ffff4b67520, 
put_pixel = 0x7ffff4b67450, sub_image = 0x7ffff4b67170, 
add_pixel = 0x7ffff4b66650}} 
+2

당신은 아마 32 비트 비주얼을 사용하여 윈도우를 생성 할 필요가있다. 성공적으로 32 비트 깊이의 GetImage 데이터를받을 수 있습니다. 여기에서 만드십시오 - https://github.com/sidorares/node-x11/blob/master/examples/smoketest/transpwindow.js –

+0

안녕하세요 @ AndreySidorov 저는 24 비트를 얻었지만 알파를 얻습니다. 그것에서, 나는 gget BGRA, 제발 아주 내 흥미로운 아래 내 솔루션을 참조하십시오. – Noitidart

답변

0

난 항상 32 비트 이미지를 얻을 것으로 보인다. 이것은 내 코드, js-ctypes, 모든 모니터의 스크린 샷입니다.

https://github.com/Noitidart/_scratchpad/blob/c41012b16842f0769595033bd51a3801451319be/x11%20new%20way%20skel%20non%20jsm.js

이 내를 XImage 구조체는 XGetImage 이후 :

"width:" "1280" "height:" "919" "xoffset:" "0" "format:" "2" "data:" "ctypes.char.ptr(ctypes.UInt64("0x7f850fe00000"))" "byte_order:" "0" "bitmap_unit:" "32" "bitmap_bit_order:" "0" "bitmap_pad:" "32" "depth:" "24" "bytes_per_line:" "5120" "bits_per_pixel:" "32" "red_mask:" "16711680" "green_mask:" "65280" "blue_mask:" "255" "_END_" 
+1

답변 주셔서 감사합니다. 24 비트 깊이를받는 것처럼 보입니다. 비트 _per_pixel은 여전히 ​​32와 같습니다. 나는 RGB에 알파 값을 얻을 수 있도록 32의 깊이를 얻길 바랐다. – NeilMonday

+0

매우 intresting하지만 나는 알파를 얻습니다, 나는'BGRA'를 얻습니다. 나중에 어떻게 코드를 바꿔 쓰는지 알아 둡니다. – Noitidart