利用gdi+转换图片,从png转到jpg时,透明的部分变成黑色而不是白色了.
int GetEncoderClsid(const wchar_t* format, CLSID* clsid) {
unsigned int num = 0;
unsigned int size = 0;
GetImageEncodersSize(&num, &size);
if(size == 0) return -1;
ImageCodecInfo* pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == 0) return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(unsigned int j = 0; j < num; ++j) {
if(wcscmp(pImageCodecInfo[j].MimeType, format) == 0) {
*clsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j;
}
}
free(pImageCodecInfo);
return -1;
}
void SaveBMP(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/bmp", &clsid);
image->Save(fn, &clsid, NULL);
}
void SaveJPG(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/jpeg", &clsid);
image->Save(fn, &clsid, NULL);
}
void SaveGIF(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/gif", &clsid);
image->Save(fn, &clsid, NULL);
}
void SaveTIF(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/tiff", &clsid);
image->Save(fn, &clsid, NULL);
}
void SavePNG(Image* image, const wchar_t* fn) {
CLSID clsid;
GetEncoderClsid(L"image/png", &clsid);
image->Save(fn, &clsid, NULL);
}
//用法如下:
Bitmap source(name.c_str());
if(sub_ext == L".png")
SavePNG(source, sub_fn.c_str());
else if(sub_ext == L".jpg" || sub_ext == L".jpeg")
SaveJPG(source, sub_fn.c_str());
else if(sub_ext == L".bmp")
SaveBMP(source, sub_fn.c_str());
else if(sub_ext == L".gif")
SaveGIF(source, sub_fn.c_str());
else if(sub_ext == L".tif" || sub_ext == L".tiff")
SaveTIF(source, sub_fn.c_str());
...全文
相关推荐
VC++利用掩码位图制作透明图片
掩码通常是一个黑白位图,黑色代表透明,白色代表不透明。当我们将掩码与目标图像进行“与”运算时,黑色区域的目标图像像素将变为透明,而白色区域则保持不变。
VC++ MFC文档视图程序静态背景图片实现:双缓冲绘图与资源管理实战
在Windows桌面应用开发中,图形用户界面(GUI)的绘制效率和视觉体验是核心考量。双缓冲绘图技术通过先在内存中完成所有绘制操作,再一次性输出到屏幕,有效解决了画面闪烁问题,是提升界面流畅度的关键技术。其工程价值在于能够显著改善用户交互体验,尤其适用于文档编辑器、数据可视化工具等需要频繁重绘的场景。本文聚焦于VC++ MFC框架下的具体实现,通过封装资源管理类,将JPG/PNG等格式图片作为自定义资源嵌入程序,并结合双缓冲机制,在文档视图架构中稳健地实现了静态背景功能。该方案不仅解决了滚动视图中的闪烁问题
TImage组件中显示png图片
需要注意的是,虽然`GetHBITMAP`方法有一个参数用于设置背景颜色,但因为Delphi的TBitmap不支持透明度,所以对于有透明部分的PNG图片,这个参数的效果并不明显,透明背景会被默认填充为黑色
bmp透明 VC++ png
实现BMP透明转换为PNG的一个常见方法是,先将BMP图像加载到内存中,然后通过编程方式设置透明色,最后将其保存为PNG格式。在保存为PNG时,可以保留透明信息,这样就能得到带有透明效果的PNG图片。
png 透明png 透明vc++
### 示例代码示例代码展示了如何使用Delphi(一种基于Pascal的编程语言)和GDI+来处理PNG图像的透明度。代码中包含了装载PNG图像、创建矩形区域、设置裁剪区域以及保存图像的具体步骤。


