CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  非技术类

请教:关于图片背景透明的问题?

楼主BOBO0202(爱与恨)2004-12-03 08:34:01 在 VC/MFC / 非技术类 提问

在VC里怎样使位图的背景在显示的时候透明? 问题点数:20、回复次数:7Top

1 楼gwinner(动力引擎)回复于 2004-12-03 09:20:51 得分 0

在位图的编辑界面,调色板中有一个样子象显示器的,它就是背景色。Top

2 楼gwinner(动力引擎)回复于 2004-12-03 09:21:28 得分 0

用它填充背景就可以了Top

3 楼gwinner(动力引擎)回复于 2004-12-03 09:31:55 得分 20

对不起楼主,我误认为是ICON(图标)了。  
   
  位图不可以的,但是你可以在显示时处理成透明的。下面是一个可以完成此功能的函数:  
  void    
  DrawTransparentBitmap(CDC   *pDC,   UINT   IDImage,CRect   &rect,   COLORREF   rgbMask)    
  {    
  CDC ImageDC;  
  CDC MaskDC;    
  CBitmap Image;  
  CBitmap *pOldImage;    
  CBitmap maskBitmap;  
  CBitmap *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   CYourWnd::OnPaint()    
  {  
  AFX_MANAGE_STATE(AfxGetStaticModuleState());  
   
  CRect rect;  
  CPaintDC dc(this);   //   device   context   for   painting  
   
  m_sticPicture.GetWindowRect(rect);  
   
  ScreenToClient(rect);  
   
  DrawTransparentBitmap(&dc,   IDB_YOURBITMAP,   rect,   RGB(255,255,255)/*back   color*/);  
   
  }Top

4 楼BOBO0202(爱与恨)回复于 2004-12-03 09:34:44 得分 0

好的,我试一试。Top

5 楼BOBO0202(爱与恨)回复于 2004-12-03 10:15:08 得分 0

我刚才试了,不可以,图片还是原封不动的显示,背景没有透明。Top

6 楼gwinner(动力引擎)回复于 2004-12-03 10:46:26 得分 0

Picture控件的Visible属性不要选择Top

7 楼BOBO0202(爱与恨)回复于 2004-12-03 11:29:01 得分 0

谢谢动力引擎,我把分给你了,希望以后多多帮忙、Top

相关问题

  • 怎么使图片的背景透明???
  • 设置VB图片背景透明
  • 关于图片透明背景
  • 如何制作透明背景的图片
  • 如何制作透明背景的图片?
  • ****************** 如何使图片透明,可以看到背景******************
  • 用VFP打印图片时,如何让其背景透明?
  • 怎样将jpg图片的白色背景变成透明色?
  • 如何在CDC上绘制背景透明的图片
  • 如何实现透明背景的图片?

关键词

  • imagedc
  • rect
  • maskdc
  • 透明
  • 背景
  • bitblt
  • pdc
  • rgb
  • 显示
  • height

得分解答快速导航

  • 帖主:BOBO0202
  • gwinner

相关链接

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

广告也精彩

反馈

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