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

100分,求解决GDI+中设置透明色的方法

楼主yangyue2846464(冬冬)2004-11-03 22:44:33 在 VC/MFC / 图形处理/算法 提问

当我用GDI+把GIF动画解析出来后,在保存每一帧的时候怎么将其颜色设为透明色呢?  
  源GIF文件就是透明色的,可是我解出来时却有了白底,不知用什么方法变为透明。请高手帮忙。 问题点数:100、回复次数:5Top

1 楼lanphaday(恋花蝶)回复于 2004-11-03 23:13:02 得分 20

alpha值设为255?Top

2 楼ReDamos(康师傅)回复于 2004-11-03 23:22:29 得分 60

你这个问题我看得不是很明白,  
  不过还是贴一下我写的把图变成透明(该图贴在背景图上)的方法,希望对你有点帮助  
  GetClientRect(&rect);  
  BITMAP   bm;  
  int   x,y,i=0;  
  mdc   =new   CDC;   临时DC用于储存位图然后再贴到内存中  
  mdc->CreateCompatibleDC(dc);与当前dc匹配  
  bitmap=new   CBitmap;  
  bgbmp=new   CBitmap;  
  bitmap->m_hObject=(HBITMAP)::LoadImage(NULL,"bitmap.bmp",IMAGE_BITMAP,150,150,LR_LOADFROMFILE);  
  bgbmp->m_hObject=(HBITMAP)::LoadImage(NULL,"bgbmp.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE);  
  bitmap->GetObject(sizeof(BITMAP),&bm);  
  double   *px=new   double   [bm.bmHeight*bm.bmWidthBytes];  
          bitmap->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px);  
  //计算透明度  
  for(y=0;y<bm.bmHeight;y++)  
  {  
  for(x=0;x<bm.bmWidth;x++)  
  {  
  px[x*3+y*bm.bmWidthBytes]*=0.5;  
  px[x*3+1+y*bm.bmWidthBytes]*=0.5;  
  px[x*3+2+y*bm.bmWidthBytes]*=0.5;  
  }  
  }  
  //调试  
  /*bitmap->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px);  
  mdc->SelectObject(bitmap);  
  dc->BitBlt(0,0,150,150,mdc,0,0,SRCCOPY);  
  MessageBox("f");*/  
  bgbmp->GetObject(sizeof(BITMAP),&bm);  
          double   *px1=new   double   [bm.bmHeight*bm.bmWidthBytes];  
  bgbmp->GetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1);  
  for(y=0;y<150;y++)  
  {  
  for(x=0;x<150;x++)  
  {  
  px1[x*3+y*bm.bmWidthBytes]=px1[x*3+y*bm.bmWidthBytes]*0.5+px[i*3];  
  px1[x*3+1+y*bm.bmWidthBytes]=px1[x*3+1+y*bm.bmWidthBytes]*0.5+px[i*3+1];  
  px1[x*3+2+y*bm.bmWidthBytes]=px1[x*3+2+y*bm.bmWidthBytes]*0.5+px[i*3+2];  
  i++;  
  }  
  }  
  bgbmp->SetBitmapBits(bm.bmHeight*bm.bmWidthBytes,px1);  
  delete   px;  
  delete   px1;  
  mdc->SelectObject(bgbmp);  
   
  具体的方法就是把图的像素都读出来再存在数组中,然后改变他的rgb值达到透明的效果,  
  具体的算法就是图*透明度+背景图*(1-透明度)  
  我这个是半透明,所以就用了%50  
   
  希望对你有点作用Top

3 楼GameWeaverDummy(小白菜)回复于 2004-11-04 00:21:03 得分 10

顶Top

4 楼yangyue2846464(冬冬)回复于 2004-11-05 10:05:24 得分 0

好像不行哩~~~同志们还有别的方法吗?Top

5 楼xili()回复于 2004-11-08 16:34:31 得分 10

俺觉得gdi+太慢了Top

相关问题

  • CDHtmlDialog中如何设置某种颜色透明?(比如用来设置边角透明)
  • 关于word图象插入时的“透明色设置”
  • 如何把“层”的背景颜色设置为半透明?
  • 如何设置图像透明色?多谢!
  • 怎样改变TreeView的背景色,甚至设置成透明?
  • 如何设置TreeView的背景色为透明(100分)
  • 如何设置CStatic控件的背景色为透明?
  • 用GDI+ 怎么把白色背景作透明
  • 求助:如何设置VB的Lable的背景色为透明色
  • 如何在网页中将图片融入背景中?设置透明色

关键词

  • gdi+
  • mdc
  • dc
  • bm
  • bgbmp
  • bmwidthbytes
  • 透明
  • bmheight
  • bitmap
  • 色

得分解答快速导航

  • 帖主:yangyue2846464
  • lanphaday
  • ReDamos
  • GameWeaverDummy
  • xili

相关链接

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

广告也精彩

反馈

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