位图
我认为你必须对每种情况作出不同的处理,256色可以通过调色板来改
变某一颜色,但在 真彩系统中必须重绘图中的相应的点才可以。(位图是
真彩色的)
#define DSPDxax 0x00E20746
void CSJSizeBar::SwapBitmapColor(CDC* pDC, Cbitmap* pBitmap,
COLORREF rgbNew, COLORREF rgbOld)
{
BITMAP bm;
Cbitmap bmMask;
CDC memDC,maskDC;
// create memory dc for drawing
memDC.CreateCompatibleDC( pDC );
Cpalette* pOldPalette = (Cpalette*)memDC.SelectPalette(
pDC->GetCurrentPalette(),FALSE );
memDC.RealizePalette();
Cbitmap* Bitmap = memDC.SelectObject( pBitmap );
// fill out bitmap structure
pBitmap->GetBitmap( &bm );
// create mask
bmMask.CreateBitmap( bm.bmWidth,bm.bmHeight,1,1,NULL );
maskDC.CreateCompatibleDC( &memDC );
Cbitmap* bmOld = maskDC.SelectObject( &bmMask );
Cbrush brush( rgbNew );
Cbrush* brOld = (Cbrush*)memDC.SelectObject( &brush );
memDC.SetBkColor( rgbOld );
maskDC.BitBlt( 0,0,bm.bmWidth,bm.bmHeight,&memDC,0,0,SRCCOPY );
memDC.SetBkColor( RGB(255,255,255) );
memDC.SetTextColor( RGB(0,0,0) );
memDC.BitBlt( 0,0,bm.bmWidth,bm.bmHeight,&maskDC,0,0,DSPDxax );
maskDC.SelectObject( bmOld );
memDC.SelectObject( &brOld );
memDC.SelectObject( Bitmap );
memDC.SelectPalette( pOldPalette,FALSE );
}
因篇幅问题不能全部显示,请点此查看更多更全内容