將圖象列表轉換成裝置無關點陣圖 (轉)
將圖象列表轉換成裝置無關點陣圖 (轉)[@more@] 在我的PrintTree例子中,我想列印彩色的樹控制.對於文字很容易,但是圖示就
不簡單了.我試著將圖象列表轉換成DIB,但是我真正需要的是一個方法,能夠取出一
個ICON的DIB,而不是整個圖象列表。下面就是我使用的具體方法:
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 Imageinffailed
return NULL;
}
// Create compatible stuff and 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* pOlitmap = memDC.Select( &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 );
}
不簡單了.我試著將圖象列表轉換成DIB,但是我真正需要的是一個方法,能夠取出一
個ICON的DIB,而不是整個圖象列表。下面就是我使用的具體方法:
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 Imageinffailed
return NULL;
}
// Create compatible stuff and 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* pOlitmap = memDC.Select( &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 );
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004511/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何將圖片轉換成影片?
- 將24位BMP真彩圖轉換成BMP灰度圖
- 圖片格式轉換,JPG圖片轉換成PDF
- Java將地圖轉換為陣列[Snippet]Java地圖陣列
- 如何將heic格式轉換成jpg圖片?
- 使用點陣圖選單項——建立點陣圖 (轉)
- 怎麼將pdf轉換成jpg圖片格式
- 將Excel表格內容直接轉換成圖片Excel
- javascript如何將字串轉換成陣列JavaScript字串陣列
- ruby中將陣列轉換成hash陣列
- 輕鬆將點陣圖轉換為向量圖,享受高品質影像——Vector Magic for Mac/winMac
- 將bmp檔案轉換成JPEG(待修改,目前可轉換但圖片倒轉)
- 如何將圖片轉word?圖文轉換選轉易俠
- 圖片怎麼轉換成PDF,圖片轉PDF教程
- 建立點陣圖選單 (轉)
- PHP掃描圖片轉點陣 二維碼轉點陣PHP
- JPG轉CAD,JPG圖片如何轉換成CAD圖紙?
- 將字串陣列轉換為浮點數陣列字串陣列
- 將json格式物件轉換成陣列物件JSON物件陣列
- 使用點陣圖選單項——點陣圖選單項例項 (轉)
- 將字串轉換成Bitmap型別 或者 將Bitmap轉換成字串字串型別
- 使用點陣圖索引和星形轉換優化OLAP查詢索引優化
- 圖象扭曲演算法 (轉)演算法
- 使用點陣圖選單項——設定點陣圖型別標記 (轉)型別
- 用WindowedMode顯示點陣圖圖象(轉)
- BMP點陣圖格式詳解--轉載
- vue+element 將圖片壓縮並轉換成base64上傳圖片Vue
- 利用網路請求將網路圖片轉換成Bitmap格式
- 把圖片轉換成CAD圖紙該如何操作?
- 使用python將元組轉換成列表,並替換其中元素Python
- PHP 物件轉換成陣列PHP物件陣列
- 陣列轉換成List集合陣列
- python將矩陣轉化為灰度圖Python矩陣
- 怎麼把圖片文字轉換成word?
- 如何將真彩色圖轉換為各種灰度圖
- PowerPoint 2007無法將Excel圖表轉換為圖形物件Excel物件
- 陣列和列表的轉換問題陣列
- 轉換成浮點數