已保存 Gdiplus::Bitmap 始终具有 Alpha 通道 (RGBA/ARGB)
Saved Gdiplus::Bitmap always has Alpha Channel (RGBA/ARGB)
我有一个 PixelFormat32bppARGB 格式的 Gdiplus::Bitmap(在 C++ 中),并使用以下方法将其转换为 PixelFormat32bppRGB:
Gdiplus::Bitmap* bitmapRGB = new Gdiplus::Bitmap(bitmap->GetWidth(), bitmap->GetHeight(), PixelFormat32bppRGB);
Gdiplus::Graphics graphics(bitmapRGB);
graphics.DrawImage(bitmap, Gdiplus::Point(0, 0));
如果我检查 RGB 位图的格式是正确的 (RGB):
bitmapRGB ->GetPixelFormat() == PixelFormat32bppRGB
如果我保存位图并检查其格式(即使用 Gimp),则会有第四个通道。
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
bitmapRGB ->Save(path, &pngClsid, NULL);
如何获得 RGB 像素格式的 png?
PixelFormat32bppRGB
仍然是 32 位。 24 位格式需要 PixelFormat24bppRGB
:
Gdiplus::Bitmap* bitmapRGB = new Gdiplus::Bitmap(
bitmap->GetWidth(), bitmap->GetHeight(), PixelFormat24bppRGB);
不需要 new
运算符,使用适当的构造函数之一来确保没有内存泄漏:
//convert:
Gdiplus::Bitmap bitmap(L"source.jpg");
Gdiplus::Bitmap bitmapRGB(bitmap.GetWidth(), bitmap.GetHeight(), PixelFormat24bppRGB);
Gdiplus::Graphics graphics(&bitmapRGB);
graphics.DrawImage(&bitmap, Gdiplus::Point(0, 0));
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
bitmapRGB.Save(L"destination.png", &pngClsid);
我有一个 PixelFormat32bppARGB 格式的 Gdiplus::Bitmap(在 C++ 中),并使用以下方法将其转换为 PixelFormat32bppRGB:
Gdiplus::Bitmap* bitmapRGB = new Gdiplus::Bitmap(bitmap->GetWidth(), bitmap->GetHeight(), PixelFormat32bppRGB);
Gdiplus::Graphics graphics(bitmapRGB);
graphics.DrawImage(bitmap, Gdiplus::Point(0, 0));
如果我检查 RGB 位图的格式是正确的 (RGB):
bitmapRGB ->GetPixelFormat() == PixelFormat32bppRGB
如果我保存位图并检查其格式(即使用 Gimp),则会有第四个通道。
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
bitmapRGB ->Save(path, &pngClsid, NULL);
如何获得 RGB 像素格式的 png?
PixelFormat32bppRGB
仍然是 32 位。 24 位格式需要 PixelFormat24bppRGB
:
Gdiplus::Bitmap* bitmapRGB = new Gdiplus::Bitmap(
bitmap->GetWidth(), bitmap->GetHeight(), PixelFormat24bppRGB);
不需要 new
运算符,使用适当的构造函数之一来确保没有内存泄漏:
//convert:
Gdiplus::Bitmap bitmap(L"source.jpg");
Gdiplus::Bitmap bitmapRGB(bitmap.GetWidth(), bitmap.GetHeight(), PixelFormat24bppRGB);
Gdiplus::Graphics graphics(&bitmapRGB);
graphics.DrawImage(&bitmap, Gdiplus::Point(0, 0));
CLSID pngClsid;
GetEncoderClsid(L"image/png", &pngClsid);
bitmapRGB.Save(L"destination.png", &pngClsid);