绘制透明位图 | |
|---|---|
| http://www.pcdog.com 2004-12-5 互联网 | |
| 在丰富多彩的软件世界中,位图的处理技术尤为重要。透明位图的显示作为 一种常用的图像处理方法,被用在众多的软件中。其基本原理,也就是将一幅需 要透明显示的位图(其透明色为已知),制作出二幅需要的位图A与B,其中A为除 透明色外均填充为黑色,B为把透明色填充为黑色其余色不变 将两幅位图合并,可形成透明位图。 创建过程如下: 1、使用透明色背景,将位图拷贝到内存屏蔽位图中。 2、利用与白色相与不变色,与黑色相与成黑色的原理,将内存位图的的背景设置 成黑色、前景设置成白色,并将屏蔽位图用与操作拷贝到此内存位图中。形成位图B。 3、将显示设备背景设置为白色、前景设置成黑色,并将屏蔽位图用与操作拷贝到 显示设备中。形成位图A。 4、将内存位图用或操作拷贝到显示设备中。最终形成透明位图。 //参数说明: //hDIB -位图句柄 //pPal -位图调色板 //xDest -显示位图的左上角x坐标 //yDest -显示位图的左上角y坐标 //colorTransparent -透明色 void DrawTransparentBitmap( CDC *pDC, int nXDest, int nYDest,HGLOBAL hDIB, COLORREF colorTransparent, CPalette *pPal) { BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; int nColors = bmInfo.bmiHeader.biClrUsed ? bmInfo.bmiHeader.biClrUsed :1< int nHeight = bmInfo.bmiHeader.biHeight; LPVOID lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors); CDC memDC,maskDC; memDC.CreateCompatibleDC( pDC ); CBitmap bmp; bmp.CreateCompatibleBitmap( pDC, nWidth, nHeight ); CBitmap *pOldBitmap = memDC.SelectObject( &bmp ); if( pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE&&nColors<256) CPalette *pOldMemPalette = memDC.SelectPalette(pPal, FALSE); memDC.RealizePalette(); ::SetDIBitsToDevice(memDC.m_hDC, 0, 0, nWidth, nHeight, 0, 0, 0, nHeight, lpDIBBits, (LPBITMAPINFO)hDIB, DIB_RGB_COLORS); maskDC.CreateCompatibleDC(pDC); CBitmap maskBitmap; maskBitmap.CreateBitmap( nWidth, nHeight, 1, 1, NULL ); maskDC.SelectObject( &maskBitmap ); memDC.SetBkColor( colorTransparent ); maskDC.BitBlt( 0, 0, nWidth, nHeight, &memDC, 0, 0, SRCCOPY ); memDC.SetBkColor(RGB(0,0,0)); memDC.SetTextColor(RGB(255,255,255)); memDC.BitBlt(0, 0, nWidth, nHeight, &maskDC, 0, 0, SRCAND); pDC->SetBkColor(RGB(255,255,255)); pDC->SetTextColor(RGB(0,0,0)); pDC->BitBlt(nXDest, nYDest, nWidth, nHeight, &maskDC, 0, 0, SRCAND); pDC->BitBlt(nXDest, nYDest, nWidth, nHeight, &memDC,0, 0, SRCPAINT); memDC.SelectObject( pOldBitmap ); } BitBlt介绍 //////////////////////////////////////////////////////////////////////////////////////////////////// dc.BitBlt(x,y,49,154,mdc,49,0,SRCAND); //BitBlt介绍:BitBlt函数的功能是将屏幕上任何一块拷贝到屏幕上其它任何一个地方。 // x 目标矩形左上角的逻辑X坐标 // y 目标矩形左上角的逻辑Y坐标 // 49 目标矩形的宽度 // 154 目标矩形的高度 // mdc 源设备描述表 // 49 源位图左上角的逻辑X坐标 // 0 源位图左上角的逻辑y坐标 //////////////////////////////////////////////////////////////////////////////////////////////////// | |
|
|