各位大侠,delphi中在image上怎么画半透明的圆

lifchina 2013-10-29 10:19:13
image位一个地图,想在上面画个半透明的圆,怎么实现
...全文
5024 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2015-06-01
  • 打赏
  • 举报
回复
desBmp.canvas.Textout(1,1,'我能半透吗'); 文字肯定不是透明的。 如果要透明,自己画,通过计算取值,复合像素点即可。
youyidianmimang 2015-06-01
  • 打赏
  • 举报
回复
@sololie 如果中间 desBmp.canvas.Textout(1,1,'我能半透吗');//输出文字的话; 文字部分还是不透明的.
鐵蛋 2013-11-13
  • 打赏
  • 举报
回复
sololie哥厉害,mark一下
sololie 2013-11-12
  • 打赏
  • 举报
回复
上面用了涛哥的图片做示例,结果被CSDN和谐了

补个图
sololie 2013-11-11
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type
TForm1 = class(TForm)
img1: TImage; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 放 一个 image 控件
btn1: TButton; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 放 一个 button
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
procedure MyDraw;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True;
img1.AutoSize := True;
img1.Picture.Bitmap.LoadFromFile('1.bmp');
end;

procedure TForm1.MyDraw;
var
bf: BLENDFUNCTION;
desBmp, srcBmp: TBitmap;
rgn: HRGN;
begin
with bf do
begin
BlendOp := AC_SRC_OVER;
BlendFlags := 0;
AlphaFormat := 0;
SourceConstantAlpha := 180; // 透明度,0~255
end;

desBmp := TBitmap.Create;
srcBmp := TBitmap.Create;

try
srcBmp.Assign(img1.Picture.Bitmap);

desBmp.Width := srcBmp.Width;
desBmp.Height := srcBmp.Height;

Windows.AlphaBlend(desBmp.Canvas.Handle, 0, 0,
desBmp.Width, desBmp.Height, srcBmp.Canvas.Handle,
0, 0, srcBmp.Width, srcBmp.Height, bf);

rgn := CreateEllipticRgn(20,20, 200, 200); // 创建一个圆形区域
SelectClipRgn(srcBmp.Canvas.Handle, rgn);
srcBmp.Canvas.Draw(0, 0, desBmp);

img1.Picture.Bitmap.Assign(nil);
img1.Picture.Bitmap.Assign(srcBmp);
finally
desBmp.Free;
srcBmp.Free;
end
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
MyDraw;
end;

end.





liuhuan992 2013-11-11
  • 打赏
  • 举报
回复
可以用控件栏,system下的paintbox控制进行绘绘制就可以了,此控件比IMAGE控件好多了
爱蹄子的羊头 2013-10-30
  • 打赏
  • 举报
回复
换 Firemonkey 直接透明叠加
haitao 2013-10-29
  • 打赏
  • 举报
回复
哦,它只能透明,不能半透明 那就建一个小form,它可以半透明的,使用程序代码把它放到Image上。。。。
lifchina 2013-10-29
  • 打赏
  • 举报
回复
引用 1 楼 sz_haitao 的回复:
放一个Tshape控件
放一个Tshap控件和直接用Ellipse画是一样啊,没法实现半透明效果,我通过改变Canvas.pen.Mode的属性能够有点半透明效果,但是不是真正的半透明。
haitao 2013-10-29
  • 打赏
  • 举报
回复
放一个Tshape控件

1,185

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧