将pnglib中的数据显示为ximage

时间:2013-04-03 16:16:18

标签: xlib libpng

我需要导入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的像素数据。

我很确定我只是误解了像素数据的存储方式,但我无法弄清楚我做错了什么。非常感谢任何帮助。

一切顺利

加里

0 个答案:

没有答案