将图象列表转换成设备无关位图 (转)

本文介绍了一种方法,用于将图象列表中的图标转换为设备无关位图(DIB)。这种方法特别适用于需要打印彩色控件的情况,例如从树形控件中单独获取并打印图标。
将图象列表转换成设备无关位图 (转)[@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 Imageinf os 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* pOl dbitmap = memDC.Select object( &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/10752043/viewspace-989020/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-989020/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值