源代码在这:http://download.csdn.net/source/2931354
运行一下会发现,背景色为一种很奇怪的颜色。并且还有白色的被截断。(使图片看起来不完整)
如果启用网上的通道扩散处理的方法。还是会存在丑陋的黑边。。我很奇怪为什么别人说透明的图片绘制出来的是白色的背景 而我的却是这种奇怪的背景呢。
图片使用的qq扣出来的资源请不要怀疑图片里面修改了某些值。。因为这张图片在windows图片查看器下是正常的。
并且用phtoshop查看 并无异常。。就是透明背景。各位高手给点思路 实在太奇怪了
运行一下会发现,背景色为一种很奇怪的颜色。并且还有白色的被截断。(使图片看起来不完整)
如果启用网上的通道扩散处理的方法。还是会存在丑陋的黑边。。我很奇怪为什么别人说透明的图片绘制出来的是白色的背景 而我的却是这种奇怪的背景呢。
图片使用的qq扣出来的资源请不要怀疑图片里面修改了某些值。。因为这张图片在windows图片查看器下是正常的。
并且用phtoshop查看 并无异常。。就是透明背景。各位高手给点思路 实在太奇怪了
CString strPath;
{
LPTSTR szBuff = strPath.GetBuffer(4000); DWORD dwLen = GetModuleFileName(NULL, szBuff, 4000);
strPath.ReleaseBufferSetLength(dwLen); int nFind = strPath.ReverseFind(_T('\\'));
strPath = strPath.Left(nFind+1);
}
m_imgTest.Load( strPath + _T("icon\\Setting.png") );
OnPaint的代码改为如下
CRect rcImg;
rcImg.left = 140;
rcImg.top = 80;
rcImg.right = rcImg.left + m_imgTest.GetWidth();
rcImg.bottom = rcImg.top + m_imgTest.GetHeight(); for(int i = 0; i < m_imgTest.GetWidth(); ++i)
{
for(int j = 0; j < m_imgTest.GetHeight(); ++j)
{
unsigned char* pucColor = (unsigned char*)m_imgTest.GetPixelAddress(i , j);
pucColor[0] = pucColor[0] * pucColor[3] / 255;
pucColor[1] = pucColor[1] * pucColor[3] / 255;
pucColor[2] = pucColor[2] * pucColor[3] / 255;
}
}
m_imgTest.AlphaBlend(dc.m_hDC, rcImg.left, rcImg.top);
这里也是图片的像素处理。
放onpaint和放inidlg有啥不同啊。
不过。。效果确实好了。。我只是担心 在onpaint里处理像素会存在效率问题
不知道是谁说的 CImage应该尽量使用Draw函数看来不能尽信。多谢兄弟