将位图文件写入FILE *或XImagestring到PNG

将位图文件写入FILE *或XImagestring到PNG,第1张

概述将位图文件写入FILE *或XImagestring到PNG

我将我的代码的输出XImage转换为位图,但输出文件是巨大的,所以我想使用lzrw压缩它我使用此代码写入位图文件

fwrite(&bmpfileheader,sizeof(bmpfileheader),1,fp); fwrite(&bmpInfoheader,sizeof(bmpInfoheader),fp); fwrite(pImage->data,4*pImage->wIDth*pImage->height,fp);

有反正我可以把它写入(char *)insted(file *),所以我可以使用lzrw压缩? 或者甚至更好,一些方法来将XImage直接转换为PNG …

谢谢;

为什么用这种方式计算位图大小?

windows成像组件 – Direct2D C ++ – 绘图,保存

有没有办法使用本机C ++从WPF窗口捕获位图?

使用mfc / win32将我的程序自己的一部分窗口保存到位图文件中

如何在GDI中翻译一个简单的位图

DirectShow – 获取vIDeo帧

如何使用win32 API将位图复制到剪贴板?

windows上的C ++中的位图 *** 作

一个便携式的函数来创build一个从原始字节的BMP文件?

如何获取窗口的位图对象在C + +的屏幕截图?

使用memcpy而不是fwrite

char* tmp = buf; memcpy(tmp,&bmpfileheader,sizeof(bmpfileheader)); tmp += sizeof(bmpfileheader); memcpy(tmp,&bmpInfoheader,sizeof(bmpInfoheader)); tmp += sizeof(bmpInfoheader); memcpy(tmp,pImage->data,4*pImage->wIDth*pImage->height);

编辑:我更新代码,thaks @bdk指出

对于内存拷贝来说,像DReJ说的那样使用memcpy ,但是如果你想把一个图像保存为PNG的话,你可能会比寻找一个像LodePNG这样简单的PNG库更糟糕:

http://members.gamedev.net/lode/projects/LodePNG/

如果有一个简单的选择,我不会浪费时间重新做自己的压缩方面 – 还有更重要的问题可以处理。

编辑 – 为了什么是值得的,我使用LodePNG保存PNG的代码如下所示:

voID PNGSaver::save_image24(const std::string& filename,const Image24_CPtr& image) { std::vector<unsigned char> buffer; encode_png(image,buffer); LodePNG::savefile(buffer,filename); } voID PNGSaver::encode_png(const Image24_CPtr& image,std::vector<unsigned char>& buffer) { int wIDth = image->wIDth(); int height = image->height(); const int pixelCount = wIDth*height; // Construct the image data array. std::vector<unsigned char> data(pixelCount*4); unsigned char *p = &data[0]; for(int y=0; y<height; ++y) for(int x=0; x<wIDth; ++x) { Pixel24 pixel = (*image)(x,y); *p = pixel.r(); *(p+1) = pixel.g(); *(p+2) = pixel.b(); *(p+3) = 255; p += 4; } // Encode the PNG. LodePNG::encode(buffer,&data[0],wIDth,height); }

总结

以上是内存溢出为你收集整理的将位图文件写入FILE *或XImagestring到PNG全部内容,希望文章能够帮你解决将位图文件写入FILE *或XImagestring到PNG所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存