用C++压缩内存中的位图
Compressing a bitmap in memory with C++
我有一个程序,它使用BitBlt((获取图像,并存储在变量unsigned char* image
中。理想情况下,在上传到我的服务器之前,我想压缩它,因为它有点大,没有压缩。我用zlib尝试了几种不同的方法,编写了自己的游程编码方法,等等,但没有成功。我把它归因于我没有很强的理解力。
我搜索并找到了一些使用zlib的例子,但我的图像在尝试压缩后似乎保持不变
unsigned char* compressBitmap(size_t inImgSize, unsigned char* inImage)
{
uLongf srcLen = inImgSize;
uLongf destLen = compressBound(srcLen);
unsigned char* outImage = new unsigned char[destLen];
int res = compress((Bytef*)outImage, &destLen, (Bytef*)inImage, srcLen);
return outImage;
}
我检查并确认它没有返回错误。所有的东西都被执行了,图像可以很好地到达服务器,只是根本没有被压缩。我可能犯了一堆愚蠢的错误,所以任何帮助都很感激。
图像数据的无损压缩通常不适合减少文件大小(尤其是照片,可能是简单的图标(。如果你想知道压缩是否真的有效,试着上传一张全黑的图像,看看大小是否缩小。如果你可以在黑色图像上看到文件大小的减小,但没有看到你正在使用的图像,你可能不得不考虑使用有损格式(例如jpeg、png等(。
相关文章:
- C / C++ 移位/偏移/向左或向右移动位图?
- 如何在快板的屏幕中显示子位图的绘制?
- CreateDIBSection为同一图像返回不一致的位图位值
- 用C++压缩内存中的位图
- C++gdi::内存中的位图到PNG图像
- Gdiplus::位图::FromHBITMAP内存泄漏
- 内存泄漏,许多位图图像C CLI
- 使用GDI+删除位图和CLSID对象时,C++内存管理失败
- 在内存中将屏幕截图位图转换为jpeg
- 使用 BITMAP 计算位图的内存使用情况
- 无法从内存正确加载位图
- GDI - 是否可以在WM_PAINT调用之间将位图保存在内存中
- 为内存中位图声明缓冲区
- 创建内存设备背景信息…对于位图,而不是设备(不是显示)
- 从内存中绘制位图
- 使用MFC或Win32显示来自内存缓冲区的所有位图类型
- 使用wxAutomationObject传递内存位图到Powerpoint
- 如何将内存中的位图转换为 PIX
- 使用自定义视图的ICS中位图分配的可用内存
- 用linux操作内存中的位图图像