使用libpng以灰度形式编写PNG或以C语言编写RGB

使用libpng以灰度形式编写PNG或以C语言编写RGB,c,image-processing,rgb,grayscale,libpng,C,Image Processing,Rgb,Grayscale,Libpng,我正在尝试从一个图像中编写一个PNG文件,该图像可以是灰度(8位*1余弦)或rgb(8位*3余弦),并在C中使用libpng 我阅读了手册并编写了这段不起作用的代码:-/ /* writing the image */ png_byte *row_pointers[img->height]; int h; for (h = 0 ; h < img->height ; h++) { row_pointers[h] = img->data+h*img->widt

我正在尝试从一个图像中编写一个PNG文件,该图像可以是灰度(8位*1余弦)或rgb(8位*3余弦),并在
C
中使用
libpng

我阅读了手册并编写了这段不起作用的代码:-/

/* writing the image */
png_byte *row_pointers[img->height];
int h;
for (h = 0 ; h < img->height ; h++)
{
    row_pointers[h] = img->data+h*img->width*image_components;
}
png_write_image(png_ptr, row_pointers);
/*写入图像*/
png_字节*行指针[img->height];
int-h;
对于(h=0;hheight;h++)
{
行指针[h]=img->data+h*img->width*image\u组件;
}
png_写入_图像(png_ptr,行指针);
图像中没有任何内容,我不明白为什么


img.data
指向图像数据(在RGB格式的情况下是隔行扫描的)

文档中说您应该使用png\u write\u end,请参阅中的“完成顺序写入”一节。
有很多例子(例如)

当我使用它时,除了空的png文件外,我还有一个错误
libpng错误:没有IDAT写入到文件中
如果直接使用会发生什么:png_write_png(png_ptr,info_ptr,png_TRANSFORM_IDENTITY,NULL);相反它对我很有用,我可以复制你在使用png_write_image时的错误,然后使用png_write_end。不过,我使用的示例之前也运行过其他函数(例如创建info_ptr内容、png_set_IHDR等)。