2011-09-27 32 views
3

我一直在寻找一个好的,快速的解决方案,并没有找到任何令我满意的东西。它似乎应该是微不足道的 - 在一些库中只需要一两次调用函数即可 - 但似乎并非如此。 libjpeg和libtiff缺乏良好的文档和人们发布的解决方案涉及了解如何生成图像并编写约50行代码。你们如何在C++中做到这一点?将C++中RGB值数组转换为图像文件的最简单方法是什么?

+0

我个人使用FreeImage,但我确定有其他图像库支持多种格式。可能是一个适合你的具体需求。 – Frigo

回答

7

如果你想“简单”了别的什么,然后看看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); 
+0

这正是我所期待的。完美工作。谢谢! – Andrew

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); 
} 
相关问题