【发布时间】:2020-09-05 17:40:02
【问题描述】:
我需要将 bmp 文件转换为 png 文件,同时将 bmps 中的一种颜色视为透明。我的应用程序使用 MFC,但我并不依赖于在解决方案中使用 MFC。我在从 gdi 移植到 Direct2D 时这样做,所以我确实可以访问 Direct2D(尽管我是 Direct2D 的真正新手)。我想避免使用 gdi+ 和外部源代码(例如 libpng),但我会重新考虑它是否提供易于实现的解决方案。性能不是问题。
如此处所示,MFC 可以很容易地从 bmp 文件创建 png 文件,但我不知道如何将 bmp 中的“透明颜色”转换为 png 中的 alpha 蒙版。 (不太理想,但我可以创建 png 文件,然后读取它,将图像的“透明颜色”更改为透明度,然后写入它。)
// Convert bmp to png.
CImage image;
if(image.Load(bmpFilename) == S_OK)
{
image.Save(pngFilename, Gdiplus::ImageFormatPNG) == S_OK);
}
我看到this thread 提出了一个非常相似的问题,但它的答案是高级别的(例如,“使用 libpng”、“使用 gdi+”、“使用 BITMAPINFOHEADER::biCompression == BI_PNG”等)。我正在寻找细节和(相对)易于实施。
谢谢!
【问题讨论】:
-
不确定为什么要避免使用 GDI+;毕竟是Windows的系统组件。你也不想使用Windows Imaging Component吗?
标签: c++ bitmap mfc png transparency