2013-06-10 3 views
2

그림에서 RGBA (실제로는 알파 채널을 신경 쓰지 않습니다) 값이 포함 된 벡터가 있습니다.이 그림을 xlib로 그릴 수 있습니다. 그래서 저는 XImage를 사용해야하고 하나를 얻으려면 XCreateImage을 사용할 필요가 있습니다.linux C++ XImage RGB <-> BGR?

XCreateImage에는 "char * data"가 필요하므로 먼저 벡터를 변환해야합니다. 화면에서

XImage *ximage = XCreateImage(display, visual /*errata : not window*/, 24, ZPixmap, 0, data, width, height, 32, 0); 
XPutImage(dpy, *_w,gc,ximage,0,0,0,0,width,height); 

내 사진이,

vector<unsigned char> picture; 
cunsigned char *unsigneddata = &picture[0]; 
char *data; 
data = (char*)unsigneddata; 

을 그래서 지금은 내 그림을 그릴 "데이터"를 사용할 수 있습니다 : 무엇을 내가 뭘하는 것이 효율적인지는 모르겠지만, 그 작동 빨간색과 파란색 채널이 반전되었습니다. 내가 무언가를 엉망으로 만들거나 그것이 옳은지, 그리고 채널을 바꿔야 하는지를 나는 모른다. 스왑을해야한다면 어레이를 둘러싼 루프를 바꾸는 것 외에 다른 방법이 있습니까?

+0

작동합니까? 'XCreateImage'는 두번째 파라미터로'Visual *'을 요구합니다. –

+0

예, 영상이 창일 수 있습니다. 문제는 빨강 및 파랑 채널의 반전이지만 여전히 내 잘못인지 알 수 없음 –

+1

데이터를 시각적으로 이해할 수있는 형식으로 변환해야합니다. 시각적 인 정보는'red_mask','green_mask','blue_mask' 필드 ('XVisualInfo' 구조체 참조)를 가지고 있으며이 마스크에 따라 각 픽셀의 R, G, B를 설정해야합니다. 예, 이것은 각 픽셀을 검토하고 변환하는 것을 의미합니다. 그러나 비주얼이 창이라면 어떻게 할 지 모르겠다. 그렇지 않으면 그 비주얼이 창과 관련된다는 것은 무엇을 의미 하는가? –

답변

0

아시겠습니까? 나는 똥에 질려! 난 그냥

// invert red and blue, xlib ams dumb, it using BGR instead of RGB... 
    unsigned char red, blue; 
    int i; 
    for(i=0;i<image.size();i+=4){ 
    red = image[i+2]; 
    blue = image[i]; 
    image[i] = red; 
    image[i+2] = blue; 
    } 

이 n.m. 귀하의 의견에 감사드립니다 ... 값을 교환