|
ÕýÈ·ÏÔʾ͸Ã÷λͼ ÍøÉÏÒѾÓÐÁ˲»ÉٵعØÓÚÈç¹û͸Ã÷ÏÔʾλͼµÄÎĵµ£¬µ«ÊÇÕâЩÎÄÕÂÖÐÓÐÒ»¸ö·Ç³£´óµÄȱÏÝ£¬Èç¹ûµ±Ò»¸öλͼ²¢²»ÊÇ24λɫ²ÊµÄλͼʱ£¬»»¾ä»°Ëµ£¬µ±Ò»¸öλͼÊÇ2λ»ò4λ»ò8λµÄλͼʱ£¬ÓÉÓÚÕâЩλͼʹÓõ÷É«°åÐÅÏ¢£¬Ê¹ÓÃÒ»°ãµÄ͸Ã÷ÏÔʾλͼµÄ·½·¨£¬½«»á³öÏÖÉ«²Ê´íÂÒµÄÏÖÏ󣬲»ÄÜÕýÈ·µØÏÔʾһ¸ö͸Ã÷µÄλͼ¡£ ÎÒÔÚǰÈËÎĵµµÄ»ù´¡ÉÏ£¬¶ÔËûÃǵÄÏÔʾ·½·¨×öÁËһЩÐÞÕý£¬Ôò¿ÉÒÔÕýÈ·µØÏÔʾÈκÎλÊýÉ«²ÊµÄ͸Ã÷λͼ¡£ÏÂÃæµÄDrawTransparentBmpº¯ÊýÊÇÒ»¸öÍêÕûµÄÕýÈ·ÏÔʾ͸Ã÷λͼµÄº¯Êý£¬Æä¸÷²ÎÊý˵Ã÷ÈçÏ£º HDC hdc£ºÄ¿±êHDC£¬¼´½«Òª»æÖÆÎ»Í¼µÄHDC HBITMAP hbmp£ºÎ»Í¼µÄ¾ä±ú£¬´Ëλͼ¿ÉÒÔÊÇ2λ¡¢4λ¡¢8λ¡¢16λ¡¢24λλͼ¡£ RECT &rect£º½«Òª»æÖƵÄÇøÓò COLORREF colorTrans£ºÍ¸Ã÷É« º¯ÊýÇåµ¥ÈçÏ£º BOOL DrawTransparentBmp(HDC hdc, HBITMAP hbmp, RECT &rect, COLORREF colorTrans) { HDC dcImage, dcTrans, dcImage24; HBITMAP holdbmp24, hbmp24; HBITMAP holdbmp; HBITMAP hbmpTrans, holdbmpTrans; // ´´½¨ÄÚ´æDC dcImage = CreateCompatibleDC(hdc); dcTrans = CreateCompatibleDC(hdc); dcImage24 = CreateCompatibleDC(hdc); if (dcImage == NULL || dcTrans == NULL || dcImage24 == NULL) // Error: cant create compatible dc return FALSE; // »ñµÃͼÏñÊôÐÔ BITMAP bmp; GetObject(hbmp, sizeof(bmp), &bmp); // Ñ¡ÔñͼƬµ½dcImageÖÐ holdbmp = (HBITMAP)SelectObject(dcImage, hbmp); // ´´½¨24ɫλͼ£¬ÕâÑù²ÅÄÜÕýÈ·µØÏÔʾ´øÍ¸Ã÷É«µÄλͼ LPBITMAPINFO lpBmpInfo; lpBmpInfo = (BITMAPINFO*) new BYTE[sizeof(BITMAPINFOHEADER)]; lpBmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); lpBmpInfo->bmiHeader.biPlanes = 1; lpBmpInfo->bmiHeader.biBitCount = nBitCount; lpBmpInfo->bmiHeader.biCompression = BI_RGB; lpBmpInfo->bmiHeader.biSizeImage = 0; lpBmpInfo->bmiHeader.biClrUsed = 0; lpBmpInfo->bmiHeader.biWidth = bmp.bmWidth; lpBmpInfo->bmiHeader.biHeight = bmp.bmHeight; HDC dc = CreateCompatibleDC(NULL); // ´´½¨ÐÂͼƬ LPVOID lpBits; hbmp24 =::CreateDIBSection(dc,lpBmpInfo,DIB_RGB_COLORS, &lpBits,NULL,0); DeleteDC(dc); delete lpBmpInfo; if (hbmp24 == NULL) // Error return FALSE; holdbmp24 = (HBITMAP)SelectObject(dcImage24, hbmp24); // ½«ÔͼƬ»æÖƵ½24ɫλͼÖÐ BitBlt(dcImage24, 0, 0, bmp.bmWidth, bmp.bmHeight, dcImage, 0, 0, SRCCOPY); // ´´½¨Maskλͼ hbmpTrans = CreateBitmap(bmp.bmWidth, bmp.bmHeight, 1, 1, NULL); if (hbmpTrans == NULL) // Error return FALSE; // Ñ¡Ôñmaskλͼµ½dcTransÖÐ holdbmpTrans = (HBITMAP)SelectObject(dcTrans, hbmpTrans); // ´´½¨ÑÚÂëͼÏñ£¨»ùÓÚÖ¸¶¨µÄÑÕÉ«£© COLORREF oldbkcolor = SetBkColor(dcImage24, colorTrans); BitBlt(dcTrans, 0, 0, bmp.bmWidth, bmp.bmHeight, dcImage24, 0, 0, SRCCOPY); SetBkColor(dcImage24, RGB(0,0,0)); COLORREF oldtextcolor = SetTextColor(dcImage24, RGB(255,255,255)); BitBlt(dcImage24, 0, 0, bmp.bmWidth, bmp.bmHeight, dcTrans, 0, 0, SRCAND); // È¥³ýÖ¸¶¨µÄÑÕÉ« COLORREF crOldBack, crOldText; crOldBack = SetBkColor(hdc, RGB(255,255,255)); crOldText = SetTextColor(hdc, RGB(0,0,0)); // ÏÔʾ͸Ã÷λͼ StretchBlt(hdc, rect.left, rect.top, rect.right - rect.left,rect.bottom - rect.top, dcTrans, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCAND); StretchBlt(hdc, rect.left, rect.top, rect.right - rect.left,rect.bottom - rect.top, dcImage24, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCPAINT); // »Ö¸´ÉèÖü°ÊÍ·Å×ÊÔ´ SelectObject(dcImage, holdbmp); SelectObject(dcImage24, holdbmp24); SelectObject(dcTrans, holdbmpTrans); DeleteObject(hbmp24); DeleteObject(hbmpTrans); SetBkColor(hdc, crOldBack); SetTextColor(hdc, crOldText); SetBkColor(dcImage24, oldbkcolor); SetTextColor(dcImage24, oldtextcolor); DeleteDC(dcImage); DeleteDC(dcImage24); DeleteDC(dcTrans); return TRUE; } °¢ÎÄ http://tulipstudio.yeah.net
±¾ÎĵØÖ·£ºhttp://www.newbooks.com.cn/info/32474.html
|