CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请教如何实现透明位图

楼主oldevil(老鬼)2002-06-12 11:20:43 在 VC/MFC / 基础类 提问

我想把位图bitblt至目的区域,但希望源位图黑色部分是透明的,即源位图黑色部分不拷贝到目的区域,不知如何实现,请指点一二. 问题点数:50、回复次数:4Top

1 楼shu()回复于 2002-06-12 11:36:33 得分 0

给个EMAIL,发给你。Top

2 楼shan_hy()回复于 2002-06-12 11:47:55 得分 0

用CImageList啊  
  或者  
  TransparentBlt  
  Top

3 楼spwnihao(╭∩╮(︶⌒︶)╭∩╮鄙视一切)回复于 2002-06-12 11:56:55 得分 50

有一种画透明位图的方法,根据需要动态生成遮罩,但是要求需要透明的位图必须指定一种透明色,凡是这个透明色的地方则画成透明的。  
   
  用VC++   MFC实现的代码如下:  
  /*  
  这是一个用来画透明位图的函数  
  CDC   *pDC   需要画位图的CDC指针  
  UINT   IDImage   位图资源ID  
  Crect   &rect   指定位图在pDC中的位置  
  COLORREF   rgbMask   位图的透明色  
  */  
  void   DrawTransparentBitmap(CDC   *pDC,   UINT   IDImage,Crect   &rect,   COLORREF   rgbMask)  
  {  
  CDC   ImageDC,MaskDC;  
   
  Cbitmap   Image,*pOldImage;  
  Cbitmap   maskBitmap,*pOldMaskDCBitmap   ;  
   
  Image.LoadBitmap(IDImage);  
  ImageDC.CreateCompatibleDC(pDC);  
  pOldImage=ImageDC.SelectObject(&Image);  
   
  MaskDC.CreateCompatibleDC(pDC);  
  maskBitmap.CreateBitmap(   rect.Width(),   rect.Height(),   1,   1,   NULL   );  
  pOldMaskDCBitmap   =   MaskDC.SelectObject(   &maskBitmap   );  
   
  ImageDC.SetBkColor(rgbMask);  
  MaskDC.BitBlt(   0,   0,   rect.Width(),   rect.Height(),   &ImageDC,   0,   0,   SRCCOPY   );  
   
  ImageDC.SetBkColor(RGB(0,0,0));  
  ImageDC.SetTextColor(RGB(255,255,255));  
  ImageDC.BitBlt(0,   0,   rect.Width(),   rect.Height(),   &MaskDC,   0,   0,   SRCAND);  
   
  pDC->BitBlt(rect.left,rect.top,rect.Width(),   rect.Height(),   &MaskDC,   0,   0,   SRCAND);  
  pDC->BitBlt(rect.left,rect.top,rect.Width(),   rect.Height(),   &ImageDC,   0,   0,SRCPAINT);  
   
  MaskDC.SelectObject(pOldMaskDCBitmap);  
  ImageDC.SelectObject(pOldImage);  
  }  
   
  void   CDemoDlg::OnPaint()  
  {  
  CPaintDC   dc(this);  
   
  Cbitmap   BmpBack,*pOldBack,;  
  BmpBack.LoadBitmap(IDB_BACKGROUND);  
   
  CDC   dcBack;  
  dcBack.CreateCompatibleDC(&dc);  
  pOldBack=dcBack.SelectObject(&BmpBack);  
   
  dc.BitBlt(0,0,100,100,&dcBack,0,0,SRCCOPY);  
  DrawTransparentBitmap(&dc,IDB_BITMAPA,Crect(0,0,48,48),RGB(192,192,0));  
   
  dcBack.SelectObject(pOldBack);  
  }  
  Top

4 楼dongfa(一桶江湖( http://www.codelive.net ))回复于 2002-06-12 11:57:36 得分 0

把它做成iconTop

相关问题

  • 如何实现透明位图,有源码么?急
  • 如何在OpenGl实现透明纹理贴图?
  • 如何实现透明位图,不是透空的那种!!!
  • 如何实现图层背景为半透明?
  • 如何实现image控件中图像的透明
  • 如何实现透明背景的图片?
  • 在.NET下如何实现透明位图?
  • 如何实现图元的半透明叠加?
  • VB如何实现透明图片吸附桌面
  • 如何实现图片的透明显示?(急)

关键词

  • imagedc
  • 透明
  • maskdc
  • rect
  • idimage
  • rgbmask
  • maskbitmap
  • 图
  • pdc
  • bitblt

得分解答快速导航

  • 帖主:oldevil
  • spwnihao

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo