我需要导入PNG并在Motif应用程序的屏幕上显示它。由于我自己最熟悉的原因,我不想使用任何比我需要的更多的库,我想坚持使用Motif和pnglib。
我已经和他争斗了几天了,我想放下自己的骄傲并寻求帮助。此屏幕截图显示了问题:
https://s3.amazonaws.com/gtrebol264929/pnglib_fail.png
右边的窗口显示了图像的样子,左边的窗口是我的Motif应用程序,显示了我的应用程序中的样子。显然,我已经获得了图像数据,因为可以看到图像的基本概念。但是很明显我搞砸了如何将像素数据从pnglib变成XImage。以下是我的代码:
char * xdata = malloc(width * height * (channels + 1));
memset(xdata,100,width * height * channels);
int colc = 0;
int bytec = 0;
while (colc < width) {
int rowc = 0;
while(rowc < height) {
png_byte * row = png.row_pointers[rowc];
memcpy(&xdata[bytec],&row[colc],1);
bytec += 4;
rowc += 1;
}
colc += 1;
}
XImage * img = XCreateImage(display, CopyFromParent, depth * channels, ZPixmap, 0, xdata, width, height, 32, bytes_per_line);
printf("PNG %ix%i (depth: %i x %i) img: %p\n",width,height,depth,channels,img);
XPutImage (display, win, gc, img, 0, 0, 0, 0, width, height); // 0, 0, 0, 0 are src x,y and dst x,y
png.row_pointers是来自pnglib的像素数据。
我很确定我只是误解了像素数据的存储方式,但我无法弄清楚我做错了什么。非常感谢任何帮助。
一切顺利
加里