linux C ++ XImage RGB< - > BGR?

时间:2013-06-10 05:38:05

标签: c++ linux rgb xlib

我有一个包含RGBA的矢量(实际上我不关心alpha通道)来自图片的值,我想用xlib绘制这张图片。所以我必须使用XImage并获得一个我需要使用XCreateImage

XCreateImage需要“char * data”所以首先我需要转换我的向量。我不知道我所做的事情是否有效,但是有效:

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

所以现在我可以使用“数据”来绘制我的照片,

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

我在屏幕上的图片有红色和蓝色通道倒置。我不知道我是否弄乱了什么,或者它是否正确以及我是否必须更换频道。如果我必须交换,还有另一种方法,而不仅仅是在数组上循环来交换它们吗?

1 个答案:

答案 0 :(得分: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。