求助:如何实现这样的透明效果?(40分)

  • 主题发起人 主题发起人 sxwy
  • 开始时间 开始时间
S

sxwy

Unregistered / Unconfirmed
GUEST, unregistred user!
想在一个图片的上面再放一个图片,但第二个图片要求透明的(第二个图片只有文字信息),以下代码不能实现,求助高手帮忙.
Var Tmp1,tmp2:Tbitmap;
begin
Tmp1:=Tbitmap.Create ;
Tmp1.Width :=128;
Tmp1.Height :=64;
Tmp1.Canvas.Brush.Color :=Clblack;
Tmp1.Canvas.Font.Name:='宋体';
Tmp1.Canvas.Brush.Style :=Bsclear;
Tmp1.Canvas.FillRect(Tmp1.Canvas.ClipRect);
Tmp1.Canvas.TextOut(0,0,'test12345678');
Image1.Picture.Bitmap.Assign(Tmp1);

Tmp2:=Tbitmap.Create ;
Tmp2.Width :=128;
Tmp2.Height :=64;
Tmp2.Canvas.Brush.Color :=Clblack;
Tmp2.Canvas.Font.Name :='宋体';
Tmp2.Transparent :=True;
Tmp2.Canvas.Brush.Style:=Bsclear;
Tmp2.Canvas.FillRect(Tmp2.Canvas.ClipRect);
Tmp2.Canvas.TextOut(5,0,'test12345678');

Image2.Picture.Bitmap.Assign(tmp2);
Tmp1.Free ;
Tmp2.Free;
 
不好意思我帮不了你,但是我可以告诉你code 一点也不规范.
编程习惯不好?
望你以后注意!!
[blue][/blue]
 
多谢提醒.................期待问题解决..........
 
上面一层不用图片,直接在底层图像的canvas 上进行textout

即可实现透明效果;
 
唉,现在就想用image来做实验呀,我写了一个类.可以拖动位置以显示图像.但是移到第一个上面就看不到第一个了.郁闷中.
 
设置Image2的Transparent属性就可以了呀,
Image2.Transparent := True;
 
我就不想用IMAGE的Transparent属性来控制,但为什么将TMP1,Tmp2的Transparent设为TRUE后加载到IMAGE还是不透明的.而一定要设IAMGE呢.
 
透明其实只是将其中一种颜色不画出来而已!
Tmp2是透明到Image上了, 但在Image来图时,会用自动以白色作背景,这相当于,Tmp2透明到一个白色的画布上了,
事实上Tmp2透明和Image透明是两回事,Tmp2透明不等于Image也会透明;
一般图片(包括Image)透明时是将图片左下角的点的颜色作为透明色,所有与该点的颜色相同时,不画出来;
 
那应该怎么办呢
 
有这么麻烦吗?直接在第一张图写出透明字不就行了,

with Image1.Canvas do begin
Pen.Color:=clred;
Font.Size:=9;
Font.Name:='宋体';
Font.Color:=clred;
TextOut(10, 20,'test12345678' );
OldBkMode:= SetBkMode({Image1.Canvas.}Handle, TRANSPARENT);
TextOut(10, 50, 'test12345678');
SetBkMode(Handle, OldBkMode);
end;

比较一下这种写法不同,不知道是不是有你要的效果.
 
忘了定义变量,不好意思,让大家多收一封信[:D]
var
OldBkMode : integer;
 
在测试,看能否解决.谢谢各位.
 
后退
顶部