TImage控件上放bmp后,选择透明时为什么吸不掉周围的颜色?(100分)

  • 主题发起人 主题发起人 iameliza
  • 开始时间 开始时间
I

iameliza

Unregistered / Unconfirmed
GUEST, unregistred user!
大家有遇到这个问题吗?
 
可以用这个函数来作最快
function TransparentBlt;
external 'msimg32.dll' name 'TransparentBlt';
 
谢谢!
但能举个例子吗?我不太会用阿!!我像下面这样写的,打算将image1图片中的红色吸掉后显示在目的区image2,结果目的区域是一块空白???
估计是hdc不对,请大家指教!!!分数一定给大家送上!
procedure TForm1.Button1Click(Sender: TObject);
var dc1,dc2:HDC;
begin
dc1 := Image1.Canvas.Handle ;
dc2 := Image2.Canvas.Handle ;

TransparentBlt(dc2,Image2.Left+form1.Left,Image2.Top+form1.top,Image2.Width,Image2.Height,dc1,Image1.Left+form1.Left,Image1.Top+form1.top,Image1.Width,Image1.Height,ClRed);

end;
 
为什么大家不感兴趣呢???
 
两个left,top参数错了吧。
TransparentBlt(dc2,0,0,Image2.Width,Image2.Height,dc1,0,0,Image1.Width,Image1.Height,ClRed);
 
根本不是这个原因啊,
好像挺麻烦的,要用到getdc,createcompatibledc,selectobject这些函数,但具体我不太明白。
请大家帮忙拉!!
 
不用那么麻烦
一般TImage是默认左下角那个点的颜色为透明色的
你看看,我试成功过。
 
那时你因为没有设置TransParentColor呀!
你必须指定哪个color的背景需要TransParent才行.
看看TBitmap.TransparentColor的help就行了
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap : TBitMap;
begin
Bitmap := TBitmap.Create;
try
with Bitmapdo
begin
LoadFromFile('c:/Program Files/Common Files/Borland Shared/Images/Splash/256color/factory.bmp');
Transparent := True;
TransParentColor := BitMap.canvas.pixels[50,50];
Form1.Canvas.Draw(0,0,BitMap);
TransparentMode := tmAuto;
// Transparent color now is clDefault = TColor($20000000);
Form1.Canvas.Draw(50,50,BitMap);
end;
finally
Bitmap.Free;
end;
end;
 
对于timage,就是Image1.Picture.Bitmap.TransparentColor
 
谢谢温柔一刀,用你的方法可以成功的吸掉单独的bitmap重的某个颜色,但我如果针对Image1.Picture.Bitmap却怎么也吸不掉指定的颜色,其实就那么一点改动啊???
procedure TForm1.Button2Click(Sender: TObject);
begin

try
with Image3.picture.Bitmapdo
begin
LoadFromFile('e:/Program Files/Common Files/Borland Shared/Images/Splash/256color/item_5.bmp');
Transparent := True;
TransParentColor := Image3.picture.bitmap.canvas.pixels[22,32];
Form1.Canvas.Draw(0,0,Image3.picture.BitMap);
TransparentMode := tmAuto;
Form1.Canvas.Draw(50,50,Image3.picture.BitMap);
end;
finally
end;
end;

落烦大伙再瞅瞅看时什么原因?
 
首先Image1.Transparent := True;//也可以在prpoperty editor 设置
因此只要这一句话就可以了:
with Image1.picture.Bitmapdo
TransParentColor := Image1.picture.bitmap.canvas.pixels[22,32];
我那段代码是从DelphiHelp里拷贝出来的,目的是说明help里有例子,
不是让你那样用啊!
你看看help就知道了,TransparentMode := tmAuto恰好是不能设置的
实际应该设置的是TransparentMode := tmFixed;
 
还是再说一句吧,免得还有误解
Form1.Canvas.Draw(.....)之类的语句是在没有使用image时的做法
有了image,当然只需要设置image.picture.bitmap的属性,不必自己draw了
唉!这样下去,我要改名叫"温柔唠叨"了 :-(
 
哎呀我犯了个傻的不得了的错误!!没有设置imagez的transparent:= true;
所以一直不对,呵呵,太傻了!!
辛苦温柔一刀拉,这么耐心!给你加分!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
636
import
I
I
回复
0
查看
788
import
I
后退
顶部