编写未压缩的JPEG或PNG图像的简单方法?

问题描述 投票:1回答:1

我在内存中有一个原始图像,组织为一个32位RGB值的数组。我想尽快把它写到图像文件中,以便我可以释放内存。有没有办法执行以下操作来编写未压缩的JPEG,PNG或TIFF图像?或者我应该说,哪种图像格式与这种写入原始像素数据的方法兼容?请注意,左上角像素位于像素数据的前4个字节中。

void write_image(uint32_t *pixels, int width, int height) {
 FILE *file=fopen("file.jpg","wb");
 write_header (file, width, height);
 fwrite (pixels,1,width*height*4,file); // write raw pixel data
 write_end (file);
 fclose(file);
}
c image png jpeg tiff
1个回答
1
投票

您似乎有两个不同的问题或动机。

首先,需要以某种未压缩格式写入图像(可能)增益速度。 PNG和JPEG是压缩格式,但您可以指示编码器(至少在某些PNG实现中)使用“无压缩”设置。

但是:a)很少有情况下“优化”会产生重大影响,正常的压缩机非常快。

b)即使使用某些compression_level=0设置进行编码,您仍然以特定格式(通常是标题,以开头)对图像进行编码。是什么导致我们的第二个动机。

其次,似乎你想避免不完全(仅)压缩,而是编码。也就是说,您希望以未编码(“原始”)格式写入像素。在这种情况下,当然,你不能写PNG或JPEG图像。您可以使用自己的或some standard RAW format,或准原始的BMP格式。但是你还需要关注像素在内存中的组织方式(例如,每个通道一个字节?RGB?BGR?RGBA?)以及其他一些问题(例如,BMP要求bytes per line是4的倍数) 。

© www.soinside.com 2019 - 2024. All rights reserved.