请问:在使用Bitblt()时,如何使背景色透明?
请问:在使用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
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
