保存的 Gdiplus::位图始终具有 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);
相关文章:
- 在AVX通道中混洗的最佳方式
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- 空 grpc 客户端通道
- 如何在进程之间创建双向通道?
- 在 libsndfile 中一次写入一个通道
- 如何在 C++ 中建立进程之间的双向通道?
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- 在RAW图像中提取RGB通道值的库或方法
- 深度缓冲区未填充阴影贴图渲染通道中的数据
- 如何将具有两个通道的垫子转换为矢量<int><矢量>?
- QWeb通道新客户端获得初始状态?
- Gdiplus位图没有Alpha通道
- Go/C++gRPC客户端通道和存根生命周期
- HBITMAP 能否包含 alpha 通道信息?
- 编写具有 2 个通道的自定义 QIODevice
- 保存的 Gdiplus::位图始终具有 Alpha 通道 (RGBA/ARGB)
- 有没有办法使用 glDrawPixel 渲染单通道灰度图像?
- gRPC C++尝试在无法访问的 IP 上连接通道时阻止客户端
- 使用 cuda 将通道与 RGBA 图像分离(无法显示完整图像)
- OpenCV C++:将RGBA转换为HSL,然后拆分通道