tempad
Readygo技术搜索引擎 >>软件工程 >> 请问:在使用Bitblt()时,如何使背景色透明?

请问:在使用Bitblt()时,如何使背景色透明?

Readygo技术搜索引擎 网络搜索 efish 2008-1-17 7:16:48

请问:在使用Bitblt()时,如何使背景色透明?

楼主snowedforest(蓬蒿人(★★★★★))2001-11-18 21:08:22 在 Delphi / VCL组件开发及应用 提问

问题点数:20、回复次数:8Top

1 楼snowedforest(蓬蒿人(★★★★★))回复于 2001-11-19 20:43:31 得分 0

??  
  Top

2 楼snowedforest(蓬蒿人(★★★★★))回复于 2001-11-20 16:29:37 得分 0

我有一幅图的背景是白色的,我想用BitBlt()将它帖到另一幅图上,并使它的白色背景透明,如何做呢?谢谢。Top

3 楼snowedforest(蓬蒿人(★★★★★))回复于 2001-11-22 13:03:46 得分 0

看来没人会了。  
  Top

4 楼thedream(梦幻使者)回复于 2001-11-22 13:36:35 得分 1

好象有个API,忘了Top

5 楼szchengyu(happy.net)回复于 2001-11-22 13:43:30 得分 5

var  
      b1,   b2:   TBitmap;  
  begin  
      b1   :=   TBitmap.create;  
      b2   :=   TBitmap.create;  
      b1.loadfromfile("d:\1.bmp");  
      b2.loadfromfile("d:\2.bmp");  
      b2.Transparent   :=   true;  
      b2.TransparentColor   :=   clWhite;     //   或   b2.canvas.pixels;等  
      b1.canvas.Draw(0,   0,   b2);  
      canvas.Draw(0,   0,   b1);  
      b1.free;  
      b2.free;  
  end;  
  Top

6 楼sleeplions(睡狮)回复于 2001-11-22 15:07:30 得分 0

先将源位图与透明色进行逻辑与运算,再进行反色处理,然后将结果与源位图进行与操作,得到一临时位图b1,再进行一些逻辑运算即可得到源位图与目标位图合成,并且指定颜色为透明的结果.1小时后给你源代码Top

7 楼sleeplions(睡狮)回复于 2001-11-22 16:10:59 得分 14

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      ExtCtrls,   StdCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          Image1:   TImage;  
          Image2:   TImage;  
          Button1:   TButton;  
          Image3:   TImage;  
          procedure   FormCreate(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
          procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
      b1,b2,b3,b4,b5,b6:tbitmap;  
      trcolor:tcolor;  
      oldcol:longint;  
  implementation  
   
  {$R   *.DFM}  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      trcolor:=clwhite;  
      b1:=Tbitmap.Create;  
      b2:=Tbitmap.Create;  
      b3:=Tbitmap.Create;  
      b4:=Tbitmap.Create;  
      b5:=Tbitmap.Create;  
      b6:=Tbitmap.Create;  
      b1:=image1.Picture.Bitmap;  
      b2:=image2.Picture.Bitmap;  
      b3.Width:=b1.Width;  
      b3.Height:=b1.Height;  
      b3.Monochrome:=true;  
      b4.Width:=b1.Width;  
      b4.Height:=b1.Height;  
      b4.Monochrome:=true;  
      b5.Width:=b1.Width;  
      b5.Height:=b1.Height;  
      b6.Width:=b1.Width;  
      b6.Height:=b1.Height;  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      oldcol:=setbkcolor(b2.Canvas.Handle,colortorgb(trcolor));  
      bitblt(b3.Canvas.Handle,0,0,b3.Width,b3.Height,b2.Canvas.Handle,0,0,srccopy);  
      setbkcolor(b2.Canvas.Handle,oldcol);  
      bitblt(b4.Canvas.Handle,0,0,b4.Width,b4.Height,b3.Canvas.Handle,0,0,notsrccopy);  
      bitblt(b5.Canvas.Handle,0,0,b5.Width,b5.Height,b2.Canvas.Handle,0,0,srccopy);  
      bitblt(b5.Canvas.Handle,0,0,b5.Width,b5.Height,b4.Canvas.Handle,0,0,srcand);  
      bitblt(b6.Canvas.Handle,0,0,b6.Width,b6.Height,b1.Canvas.Handle,0,0,srccopy);  
      bitblt(b6.Canvas.Handle,0,0,b6.Width,b6.Height,b3.Canvas.Handle,0,0,srcand);  
      bitblt(b6.Canvas.Handle,0,0,b6.Width,b6.Height,b5.Canvas.Handle,0,0,srcinvert);  
      image3.Picture.Bitmap:=b6;  
      image3.Refresh;  
  end;  
   
  procedure   TForm1.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
  begin  
  b1.Free;  
  b2.Free;  
  b3.Free;  
  b4.Free;  
  b5.Free;  
  b6.Free;  
  end;  
   
  end.  
  Top

8 楼snowedforest(蓬蒿人(★★★★★))回复于 2001-12-08 17:36:03 得分 0

今天来还帐。谢谢各位。Top

责任编辑: efish 参与评论 查找更多:
相关文章
oracle 9i的客户端可以连接oracle 8.0.0.5的服务器端… oracle 9i的客户端可以连接oracle 8.0.0.5的服务器端吗?
请问哪里有关于DBGrid的比较系统的使用教程? 请问哪里有关于DBGrid的比较系统的使用教程?
含有LIKE的SQL语句在程序里应该怎么写啊? 含有LIKE的SQL语句在程序里应该怎么写啊?
高分求救,怪问题,关于数据库访问驱动!! 高分求救,怪问题,关于数据库访问驱动!!
hi,请大家帮帮忙,关于,windows窗口的拖动问题~~~~~ hi,请大家帮帮忙,关于,windows窗口的拖动问题~~~~~
我应该学Flash 5还是MX或者直接学MX2004? 我应该学Flash 5还是MX或者直接学MX2004?
急问:SQL如何实现两个表的笛卡儿乘积(有公共字段)? 急问:SQL如何实现两个表的笛卡儿乘积(有公共字段)?
菜鸟问题:怎么简单的实现机器之间的相互通信! 菜鸟问题:怎么简单的实现机器之间的相互通信!
为什么我的IE每次打开都是最小化的? 为什么我的IE每次打开都是最小化的?
请教delphi起家的java高手给小弟指点迷经!! 请教delphi起家的java高手给小弟指点迷经!!
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎