MFC的LIST Control显示图标问题
使用List Control显示多个.ico的图标,如何将图标处理为灰色?
首先是取到Icon文件夹下的图标文件,如果不存在,则获取exe文件的图标。
对图标文件处理如下:
CFileFind *fileFind=new CFileFind();
CString str;
SHFILEINFO sfi;
m_imageList.Create(GetSystemMetrics(SM_CXICON),
GetSystemMetrics(SM_CYICON),ILC_COLOR24,50,50);
m_List.SetImageList(&m_imageList,LVSIL_NORMAL);
if(lsInfo.xmlNum>0)
{
int i=0;
BOOL res=fileFind->FindFile("Icon//*.*");
while(i<lsInfo.xmlNum)
{
str.Format("Icon//%s.*",lsInfo.lsXmlInfo[i].AppName);
res=fileFind->FindFile(str);
if(!res)
{
str.Format("%s",lsInfo.lsXmlInfo[i].AppPath);
res=fileFind->FindFile(str);
}
res=fileFind->FindNextFile();
SHGetFileInfo(fileFind->GetFilePath(),0,
&sfi,sizeof(sfi),SHGFI_ICON);
m_imageList.Add(sfi.hIcon);
m_List.InsertItem(i,lsInfo.lsXmlInfo[i].AppName,i);
//m_List.InsertItem(i,fileFind->GetFileName(),i);
i++;
}
}
if(fileFind)
{
delete fileFind;
}
通过网上查可以通过转换为Bitmap来处理,希望大家能给点思路,谢谢。
[解决办法]
图像处理算法等灰度图
[解决办法]
不用转为Bitmap,在兼容DC里绘制后再通过算法转为灰度图,网上都有现成的算法了
[解决办法]
GID+
用GDI+估计几行代码吧 效果如何 就没试验过了
关键代码
Bitmap *pBmp = Bitmap::FromHICON(hIcon);
ImageAttributes imAtt;
imAtt.SetOutputChannel( ColorChannelFlagsK, ColorAdjustTypeDefault);
Graphics g(pBmp);
pg->DrawImage( pBmp, RectF(0,0,pBmp->GetWidth(),pBmp->GetHeight()) ,0, 0,
pBmp->GetWidth(),
pBmp->GetHeight(),
UnitPixel, &imAtt );
以上代码获得的pBmp为灰度图
在使用CreateIcon获得灰图标