image位一个地图,想在上面画个半透明的圆,怎么实现半透明圆

解决方案 »

  1.   

    放一个Tshap控件和直接用Ellipse画是一样啊,没法实现半透明效果,我通过改变Canvas.pen.Mode的属性能够有点半透明效果,但是不是真正的半透明。
      

  2.   

    哦,它只能透明,不能半透明那就建一个小form,它可以半透明的,使用程序代码把它放到Image上。
      

  3.   

    换 Firemonkey 直接透明叠加
      

  4.   

    可以用控件栏,system下的paintbox控制进行绘绘制就可以了,此控件比IMAGE控件好多了
      

  5.   


    unit Unit1;interfaceuses
      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.
      

  6.   

    上面用了涛哥的图片做示例,结果被CSDN和谐了补个图