C++ Cimage通过位图处理,将bmp图片转png,并透明
时间: 2023-08-16 15:05:47 浏览: 448
要将 BMP 图片转换为 PNG 格式并且加上透明度,可以使用 C++ 的 CImage 库。下面是一个简单的示例代码:
```cpp
#include <atlimage.h>
int main()
{
// 加载 BMP 图片
CImage bmpImage;
bmpImage.Load(L"test.bmp");
// 创建 PNG 图片
CImage pngImage;
pngImage.Create(bmpImage.GetWidth(), bmpImage.GetHeight(), 32);
// 复制 BMP 图片到 PNG 图片,并设置透明度
CDC dc;
dc.CreateCompatibleDC(NULL);
CBitmap bitmap;
bitmap.CreateBitmap(bmpImage.GetWidth(), bmpImage.GetHeight(), 1, 32, NULL);
dc.SelectObject(bitmap);
bmpImage.BitBlt(dc, 0, 0);
BITMAPINFO info;
pngImage.GetBitmapBits(pngImage.GetPitch() * pngImage.GetHeight(), NULL);
pngImage.GetBitmapInfo(&info);
info.bmiHeader.biBitCount = 32;
BYTE* pixels = (BYTE*)info.bmiColors;
for (int i = 0; i < 256; ++i) {
pixels[4 * i + 0] = i;
pixels[4 * i + 1] = i;
pixels[4 * i + 2] = i;
pixels[4 * i + 3] = i;
}
pngImage.SetBitmapBits(pngImage.GetPitch() * pngImage.GetHeight(), bmpImage.GetBits());
pngImage.AlphaBlend(dc, 0, 0, pngImage.GetWidth(), pngImage.GetHeight(), 0, 0, bmpImage.GetWidth(), bmpImage.GetHeight(), BLENDFUNCTION{ AC_SRC_OVER, 0, 255, AC_SRC_ALPHA });
// 保存 PNG 图片
pngImage.Save(L"test.png", Gdiplus::ImageFormatPNG);
return 0;
}
```
需要注意的是,这里使用了 GDI+ 库,因此需要链接 gdiplus.lib 库文件。
阅读全文