相关疑难解决方法(0)

如何在具有透明度和不透明度的画布上绘画?

概观

从GR32库中,我使用TImgView32渲染网格,这将是我的透明背景,如下所示:

在此输入图像描述

放在TImgView32内部我有一个常规的TImage,我将在画布上绘制,如下所示:

在此输入图像描述

任务

我想要实现的是能够设置画笔的不透明度,从而为我的程序中的图像编辑提供了更多的可能性.而不是绘制一个平面颜色,设置画笔的不透明度允许不同级别的颜色深度等.

我在搜索时更早地发现了这个问题:在Delphi 2010中绘制不透明椭圆 - Andreas Rejbrand在他的答案中提供了一些例子.

我已经看过安德烈亚斯做了什么,并提出了我自己的简化尝试,但我遇到了问题.看看下面这两个图像,第一个是透明背景,第二个是黑色背景,以显示问题更清晰:

在此输入图像描述 在此输入图像描述

正如你所看到的,在画笔(圆圈)周围是一个非常讨厌的广场我无法摆脱.所有应该可见的是刷子.这是我用来产生这些结果的代码:

procedure DrawOpacityBrush(ACanvasBitmap: TBitmap; X, Y: Integer;
  AColor: TColor; ASize: Integer; Opacity: Integer);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.SetSize(ASize, ASize);
    Bmp.Transparent := False;

    with Bmp.Canvas do
    begin
      Pen.Color := AColor;
      Pen.Style := psSolid;
      Pen.Width := ASize;
      MoveTo(ASize div 2, ASize div 2);
      LineTo(ASize div 2, ASize div 2);
    end;

    ACanvasBitmap.Canvas.Draw(X, Y, Bmp, Opacity);
  finally
    Bmp.Free;
  end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

11
推荐指数
1
解决办法
3万
查看次数

标签 统计

delphi ×1

delphi-xe ×1