我有一个包含图片中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);
我在屏幕上的图片有红色和蓝色通道的反转。我不知道我是不是搞乱了什么,或者它是否正确,我是否必须交换频道。如果我必须交换,除了在数组上执行循环来交换它们之外,还有另一种方法吗?
发布于 2013-06-10 18:58:55
你猜怎么着?我受够了他妈的!我只是交换了值..。
// 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.
https://stackoverflow.com/questions/17017432
复制