读书人

CListCtrl显示透明PNG图片的有关问题

发布时间: 2013-12-29 13:07:03 作者: rapoo

CListCtrl显示透明PNG图片的问题
CListCtrl显示透明PNG图片的有关问题

上边的图是我做出来的效果,用的是ListCtrl控件,但是里边的PNG不是透明的。下边是实现的部分代码



上边的图是我做出来的效果,用的是ListCtrl控件,但是里边的PNG不是透明的。下边是实现的部分代码


Bitmap* pThumbnail = (Bitmap*)bmp.GetThumbnailImage(sourceWidth, sourceHeight, NULL, NULL); //设定缩略图的大小
HBITMAP hBmp;
pThumbnail->GetHBITMAP(Color(255,255,255),&hBmp);
CBitmap *pImage = CBitmap::FromHandle(hBmp); //转换成CBitmap格式位图

TCHAR drive[MAX_PATH] = _T("");
TCHAR dir[MAX_PATH] = _T("");
TCHAR fname[MAX_PATH] = _T("");
TCHAR ext[MAX_PATH] = _T("");

_wsplitpath(path ,drive, dir,fname, ext);
CString itemName(fname);
itemName.Append(ext);

int index = m_imageList.Add(pImage,RGB(255,255, 255));
m_listCtrl.InsertItem(index, itemName, index);


http://bbs.csdn.net/topics/390670670我是要实现这样的效果。
求大神帮解决,在线等回答
VC加载 png 没有透明功能,要想使加载到程序中的png图像有透明工能,请在加载图片后,加入以下代码:

Cimage mimage;
HRESULT hr = mimage.Load(szImageName);
for(int i = 0; i < mimage.GetWidth(); i++)
{
for(int j = 0; j < mimage.GetHeight(); j++)
{
unsigned char* pucColor = reinterpret_cast<unsigned char *>(mimage.GetPixelAddress(i , j));
pucColor[0] = pucColor[0] * pucColor[3] / 255;
pucColor[1] = pucColor[1] * pucColor[3] / 255;
pucColor[2] = pucColor[2] * pucColor[3] / 255;
}
}

[解决办法]
或者请看http://blog.csdn.net/cashey1991/article/details/7517034

读书人网 >VC/MFC

热点推荐