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

将图象列表转换成设备无关位图 (转)[@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/10748419/viewspace-1004511/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10748419/viewspace-1004511/

产业园区如何通过数智平台提升科技创新服务能力?.docx 科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术移、成果化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

相关推荐

数据库表结构可视化工具

数据库表结构可视化工具是一个基于Java和JavaFX开发的桌面应用程序,用于解析和可视化MySQL数据库的表结构,生成ER图,并支持数据字典导出。

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

       在我的PrintTree例子中,我想打印彩色的树控制.对于文本很容易,但是图标就不简单了.我试着将图象列表转换成DIB,但是我真正需要的是一个方法,能够取出一个ICON的DIB,而不是整个图象列表。下面就是我使用的具体方法:HANDLE CAdvancedTreeCtrl::ImageToDIB( CImageList* pImageList, int iImageNumber, C

cnviolet的专栏 796

高校技术移办公室如何优化科研资源化路径?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术移、成果化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

第五章:图形设备接口(GDI)、颜色及字体

1.通常窗口的客户区并不包括边框、标题栏和菜单栏.因此如果创建了一个CClientDC对象,则该设备环境的映射区域也仅限于客户区域,即用户不可能在客户区域之外绘图.如果创建的是CWindowDC对象那么点(0,0)指的就是整个屏幕的左上角,这时就允许用户在显示器的任何地方绘图.包括窗口边框、标题栏等等.但是我们要记住:视图窗口没有非客户区,因此CWindowDC更适合于框架窗口,而不是视图窗口

sunliangyuan的专栏 1970

Device-Dependent Bitmaps (DDB) 设备相关位图

设备相关的位图(DDB)使用单一结构BITMAP结构描述。该结构的成员指定矩形区域的宽度和高度,以像素为单位;将条目从设备调色板映射到像素的数组的宽度;以及器件的颜色格式,在每个像素的颜色平面和位数方面。应用程序可以通过调用GetDeviceCaps函数并指定适当的常量来检索设备的颜色格式。请注意,DDB不包含颜色值;相反,颜色是依赖于设备的格式。有关详...

weixin_33924770的博客 209

位图、调色板以及区域

一、调色板     在使用256色显卡的计算机上,每个程序允许使用的颜色一共只有256种。但是除了操作系统保留的20种称为静态颜色外其他的236种颜色允许每个应用程序自己决定。于是就有了调色板。应用程序在这种计算机上运行为了获得较好的显示效果必须将自己需要使用的主要颜色选入显卡的调色板当中以供使用。     使用调色板我们首先要知道计算机显卡的类型,以判断是否要使用或者是否能够使用调色板。

微笑的艾米 2776

图像列表控制(CImageList

图像列表控制(CImageList)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。可以利用WINDOWS32位应用程序接口函数API来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。 m_hImageList 连接图像对象的控制句柄  CimageList&imageList建立图像控制对象结构  

heary29的专栏 3317

图像处理里面调色板(Palette)是什么意思?

图像处理中为了节省表示图像RGB信息的空间用调色板存储彩色信息(RGB值),数据区只存储当前象素的色彩在调色板中的位置,这样就省了很多字节。不过真彩色的图像没有调色板。调色板是颜色的索引,只用于8位图像,16位以上就没有了。 随便的一幅256色BMP的图像 比如调色板区域的内容为:00 00 00 00   00 00 40 00  00 00 80 00   00 00 FF 00    

nature_forest的博客 1万+

bug?VS2010中CImageList::DrawIndirect总是返回失败

//VS2010 #if _MSC_VER >= 1600 pImageList->Draw(pDC, nImage, point, ILD_NORMAL); #else SIZE size; size.cx = rect.Width() < sizeImage.cx ? rect.Width() : sizeImage.cx; size.cy = rect.Hei

菜头 1802

BMP 设备无关位图格式

设备无关位图和BMP文件        设备无关位图(DIB)自带颜色信息。从名字就可以看出DIB是和设备无关的,任何运行Windows操作系统的计算机都可以处理DIB。DIB通常以BMP文件的形式被保存在磁盘上或作为资源文件保存在EXE文件和DLL文件中。设备相关位图DDB也可以以BMP文件中的形式保存。   BMP文件中DIB的结构

勤能补拙 2472

自定义按钮控件-图标按钮

1."IconBtn.h" class CIconBtn : public CButton { public: CIconBtn(); CImageList* m_pImageList; //图像列表指针 int m_ImageIndex; //图标索引 BOOL IsPressed; //按钮是否被按下 public: virtual void DrawI

Greless的后花园 2428

sam l part1 666niubi

sam l part1 666niubi

上一篇: 软件工程能帮多大忙? (转)
下一篇: 基于MFC的大型数据文件处理方法 (转)
cuiji1279
博客等级 码龄10年 13粉丝 588原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值