我正在尝试在MFC对话框(c ++)上显示图像。
如果我显示jpg,一切正常,但带有透明区域的png,结果会有所不同。
我正在使用一个只应该是黑色和透明的png图像,但它周围还有一个白色框架和其他一些区域。
这是我正在使用的代码:
CDC *pDC;
pDC = this->GetDC();
HDC hdc = pDC->GetSafeHdc();
CImage image;
image.Load( ".//home.png" );
image.Draw(hdc , 50, 50);
结果如下:
有什么想法吗?
顺便问一下,我最后应该发布pDC吗?
答案 0 :(得分:0)
使用透明度需要使用"预乘"图片。基本上,在第一次使用之前运行图像像素(查看GetBits()
)并按组件转换每个像素,如:
c[0] = (unsigned char)( (unsigned int)c[0] * (unsigned int)c[3] / 255 );
c[1] = (unsigned char)( (unsigned int)c[1] * (unsigned int)c[3] / 255 );
c[2] = (unsigned char)( (unsigned int)c[2] * (unsigned int)c[3] / 255 );
你可以在网上搜索一些例子。
答案 1 :(得分:0)
我找到了一种简单的方法:
CDC *pDC;
pDC = this->GetDC();
HDC hdc = pDC->GetSafeHdc();
Gdiplus::Graphics G(hdc);
Gdiplus::Image I(L".//home.png");
G.DrawImage(&I,0,0);