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