www.pudn.com > mfc资源大全1.rar > img2dib.shtml
Bitmap & Palette - Image to DIB
In my PrintTree sample I wanted to print the tree in color. This was easy for text, but not for the icons. I tried a lot to convert the imagelist to DIB, but what I really needed was a method, which gives back the DIB of one icon, not of the whole Imagelist. And here is the used method:
HANDLE CAdvancedTreeCtrl::ImageToDIB( CImageList* pImageList, int iImageNumber, CWnd* pWnd,
BOOL bOverlay, HTREEITEM actualItem )
{
// Local Variables
CBitmap bitmap;
CWindowDC dc( pWnd );
CDC memDC;
CRect rect;
CPalette pal;
IMAGEINFO imageInfo;
if( FALSE == pImageList->GetImageInfo( iImageNumber, &imageInfo ) )
{
// Getting of the Imageinfos failed
return NULL;
}
// Create compatible stuff and select Bitmap
if( FALSE == memDC.CreateCompatibleDC( &dc ) )
{
// Create failed
return NULL;
}
if( FALSE == bitmap.CreateCompatibleBitmap( &dc,
imageInfo.rcImage.bottom-imageInfo.rcImage.top,
imageInfo.rcImage.right-imageInfo.rcImage.left ) )
{
// Create failed
return NULL;
}
CBitmap* pOldBitmap = memDC.SelectObject( &bitmap );
if( NULL == pOldBitmap )
{
// Select failed
return NULL;
}
// Local Variables for Draw
CPoint point( 0, 0);
UINT nStyle = ILD_NORMAL;
// Is there an Overlay
if( TRUE == bOverlay )
{
TV_ITEM tv_item;
// Set up the Item-Struct
tv_item.hItem = actualItem;
// Get the full Item-Struct
GetItem( &tv_item );
// Set the wanted style
nStyle = ILD_TRANSPARENT|( tv_item.state & TVIS_OVERLAYMASK );
}
// Draw Image to the compatible DC
if( FALSE == pImageList->Draw( &memDC, iImageNumber, point, nStyle ) )
{
// Drawing of the Image failed
return NULL;
}
// Create logical palette if device support a palette
if( dc.GetDeviceCaps( RASTERCAPS ) & RC_PALETTE )
{
UINT nSize = sizeof(LOGPALETTE) + ( sizeof(PALETTEENTRY) * 256 );
LOGPALETTE* pLP = (LOGPALETTE*)new BYTE[nSize];
pLP->palVersion = 0x300;
pLP->palNumEntries = (unsigned short)GetSystemPaletteEntries( dc, 0, 255,
pLP->palPalEntry );
// Create the palette
pal.CreatePalette( pLP );
// Free memory
delete[] pLP;
}
memDC.SelectObject( pOldBitmap );
// Convert the bitmap to a DIB
return DDBToDIB( bitmap, BI_RGB, &pal );
}
The DDBToDIB-Method is the one already published under "Converting DDB to DIB".
Bugs and Improvements: Please report all bugs and improvements to me, thanks and enjoy it.
Date Posted: 05/05/98
| Goto HomePage |
|
Contact me: zafir@home.com
|