HBITMAP CreateBitmapFromIcon(HICON icon,int w,int h)
{
CDC dc;
dc.CreateCompatibleDC(NULL);
HDC desk=GetDC(GetDesktopWindow());
HBITMAP bmp=CreateCompatibleBitmap(desk,w,h);
CBitmap *old=dc.SelectObject(CBitmap::FromHandle(bmp));
dc.Rectangle(-1,-1,w+2,h+2);
::DrawIconEx(dc.GetSafeHdc(), 0, 0, icon, w,h, 0, 0, DI_NORMAL);//DrawIcon(dc.m_hDC,0,0,i);
dc.SelectObject(old);
ReleaseDC(GetDesktopWindow(),desk);
return bmp;
}
图像变灰:三种方法(http://www.vckbase.com/document/viewdoc/?id=1793)
1、HBITMAP hbitmap = (HBITMAP)CopyImage(hBMP, IMAGE_BITMAP, 0, 0, LR_COPYDELETEORG|LR_MONOCHROME);
2、LoadImage ()
3、HBITMAP BitmapColorToGray(CDC* pDC,HBITMAP hBitmap) { BITMAP bmpInfo; ::GetObject(hBitmap,sizeof(BITMAP),&bmpInfo); if(pDC) { CDC memDC; if( !memDC.CreateCompatibleDC(pDC) ) { return NULL; } HBITMAP oldBitmap = (HBITMAP)memDC.SelectObject(hBitmap); DWORD r,g,b; for (int H =0; H <= bmpInfo.bmHeight; H++) { for(int W = 0; W <= bmpInfo.bmWidth; W ++) { r = GetRValue(memDC.GetPixel(W,H)); g = GetGValue(memDC.GetPixel(W,H)); b = GetBValue(memDC.GetPixel(W,H)); r = (r * 3 + g * 6 + g) / 10; g = r; b = g; memDC.SetPixel(CPoint(W,H),RGB(r,g,b)); } } hBitmap = (HBITMAP)memDC.SelectObject(oldBitmap); memDC.DeleteDC(); } return hBitmap; }