使用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;
}

我检查并确认它没有返回错误。一切都已执行,映像使它很好地到达了服务器,只是根本没有压缩。我可能犯了一些愚蠢的错误,因此我们将不胜感激。

sdfweg34234 回答:使用C ++

对图像数据进行无损压缩通常不会降低文件大小(尤其是照片,可能是简单的图标)。如果您想知道压缩是否确实有效,请尝试上传全黑图像,然后查看尺寸是否减小。如果在黑色图像上看到的文件大小有所减少,但在使用的图像上却没有,您可能不得不考虑使用有损格式(例如jpeg,png等)。

本文链接:https://www.f2er.com/3147682.html

大家都在问