bmp转ico

来源:互联网 发布:秒杀群找淘宝商家合作 编辑:程序博客网 时间:2024/05/16 01:36
ico文件比较特殊,一般都不能转,这里从网友那儿看到了一段把bmp转ico的代码,没有试过,先留着以后用的上的时候,拿出来试试。多谢网友的分享。
CFileDialog   DlgFileOpen(   TRUE, "*.ICO ",NULL,NULL, "bmp文件(*.BMP)|*.BMP|| "); if(DlgFileOpen.DoModal()==IDCANCEL) return; HBITMAP   hBmpClr=   (HBITMAP)   ::LoadImage(AfxGetResourceHandle(),                                              DlgFileOpen.GetFileName(),                                              IMAGE_BITMAP,                                              0,0,                                              LR_DEFAULTCOLOR|LR_DEFAULTSIZE|LR_LOADFROMFILE                                              ); CDC   dcMemSrc,dcMemDst; dcMemSrc.CreateCompatibleDC   (NULL); dcMemDst.CreateCompatibleDC(NULL); BITMAP   bmp; ::GetObject   (hBmpClr,   sizeof   (BITMAP),   (LPVOID)   &bmp); CBitmap   bmpClr; dcMemSrc.SelectObject(hBmpClr); bmpClr.CreateCompatibleBitmap(&dcMemSrc,32,32   ); HBITMAP   hOldBmp=(HBITMAP)dcMemDst.SelectObject(bmpClr); COLORREF   clrMask=dcMemSrc.GetPixel(CPoint(0,0)); dcMemDst.FillSolidRect(0,0,32,32   ,clrMask); dcMemDst.StretchBlt(0,0,32,32   ,&dcMemSrc,0,0,bmp.bmWidth,bmp.bmHeight,SRCINVERT); hBmpClr=(HBITMAP)dcMemDst.SelectObject(hOldBmp); HBITMAP   hMaskBmp; CBitmap   bmpMask; bmpMask.CreateCompatibleBitmap(&dcMemSrc,32,32   ); hOldBmp   =   (HBITMAP)   dcMemSrc.SelectObject   (bmpMask); dcMemSrc.FillSolidRect(CRect   (0,   0,   32,   32   ),RGB(255,255,255)); hMaskBmp=(HBITMAP)dcMemSrc.SelectObject(hOldBmp); ICONINFO   IconInfo; IconInfo.fIcon=TRUE; IconInfo.hbmColor=hBmpClr; IconInfo.hbmMask=hMaskBmp; IconInfo.xHotspot=0; IconInfo.yHotspot=0; HICON   hIcon=CreateIconIndirect(&IconInfo); ::DeleteObject(hBmpClr); ::DeleteObject(hMaskBmp);