将C ++中的RGB值数组转换为图像文件的最简单方法是什么?

时间:2011-09-27 04:26:39

标签: c++ image jpeg tiff

我一直在网上寻找一个好的,快速的解决方案,并没有找到任何令我满意的东西。看起来它应该是微不足道的 - 只需要对某个库中的函数进行一两次调用就可以了 - 但事实并非如此。 libjpeg和libtiff缺乏良好的文档,人们发布的解决方案涉及了解图像的生成方式和编写~50行代码。你们如何用C ++做到这一点?

3 个答案:

答案 0 :(得分:6)

如果您想要“简单”而不是其他任何内容,请查看stb_image_write.h

这是一个单独的头文件,包括支持编写BMP,PNG和TGA文件。每种格式只需一次调用:

 int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);
 int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);
 int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);

答案 1 :(得分:3)

最简单的方法是将其另存为Netpbm image。假设你的数组被打包成每像素24位而像素之间没有填充,那么你可以写出一个超级简单的标题,然后是二进制数据。例如:

void save_netpbm(const uint8_t *pixel_data, int width, int height, const char *filename)
{
    // Error checking omitted for expository purposes
    FILE *fout = fopen(filename, "wb");

    fprintf(fout, "P6\n%d %d\n255\n", width, height);
    fwrite(pixel_data, 1, width * height * 3, fout);

    fclose(fout);
}

答案 2 :(得分:0)

在我的Graphin库中,您可以找到简单的功能:

bool EncodeJPGImage(image_write_function* pctl, void* streamPrm, unsigned width, unsigned height, unsigned char** rows, unsigned bpp, unsigned quality)

执行此转换。见http://code.google.com/p/graphin/source/browse/trunk/src/imageio.cpp#412

图书馆:http://code.google.com/p/graphin/