【发布时间】:2023-03-15 14:07:01
【问题描述】:
我需要获取内存中的 BMP(存储为 HBITMAP 或 CImage,任你选择),并将其保存到磁盘上的 PNG 文件中。
这是我目前将图像保存为 png 的方式。 CImage img; img.Save("foo.png")
我的问题是太慢了(~1920X1080 需要 250 毫秒)。保存为 JPG 的时间是 3 倍,另存为 BMP 的时间是 9 倍左右。
我知道有很多用于 linux 的 g++ 库(例如 libpng)可以做到这一点,但是大多数支持 Visual Studio 的库只支持版本 6,而且我还没有找到具有基准的库,所以我我有点犹豫是否要让这些库运行,结果发现它们太慢了。
我不确定使用哪种类型的编码器窗口(它隐藏在 DLL 中),但肯定有更快的(我什至愿意牺牲一点磁盘大小,最多是两倍)。
Java 库执行此操作非常快,但出于某种原因,Microsoft 的库速度慢得像乌龟。
所以我想知道我有哪些选项可以在大约 100 毫秒内将屏幕大小的 PNG 保存到磁盘?
【问题讨论】:
-
您可以使用设置为无损质量的 4:4:4(无色彩损失)JPG 编码器吗?
-
是的,Microsoft 库中是否有一个内置的,可以很容易地从 HBITMAP/CImage 创建?
-
我不知道有哪一个在我的脑海中,但我把它扔在那里以防你不必要地限制你的搜索空间,假设你有有png。基于 DCT 的图像编码算法(jpg 等)具有一些出色的数据并行方面,并且可以通过 SSE 指令很好地加速,所以我认为您也应该注意体面的无损 JPG 代码。
-
这是一些无损 jpeg 聊天:stackoverflow.com/questions/7895697/…
标签: c++ visual-studio-2010 encoding png libpng