在MFC C ++上的图像周围不需要的框架

时间:2014-07-24 10:56:56

标签: c++ image mfc

我正在尝试在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);

结果如下:

enter image description here

有什么想法吗?

顺便问一下,我最后应该发布pDC吗?

2 个答案:

答案 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);