Обзор
Из библиотеки GR32 я использую TImgView32 для рендеринга сетки, которая будет моим прозрачным фоном, вот так:
Помещенный внутрь TImgView32, у меня есть обычный TImage, где я буду рисовать на холсте, что-то вроде этого:
Задание
Чего я хотел бы добиться, так это возможности устанавливать непрозрачность кисти, предоставляя дополнительные возможности редактирования изображения в моей программе. Вместо того, чтобы рисовать один плоский цвет, настройка непрозрачности кисти позволяет использовать различные уровни глубины цвета и т. д.
Я нашел этот вопрос ранее, когда искал:Рисование эллипса непрозрачности в Delphi 2010-Андреас Рейбранд предоставил несколько примеров в его ответе на этот вопрос.
Я посмотрел, что сделал Андреас, и придумал собственную упрощенную попытку, но столкнулся с проблемой. Взгляните на следующие два изображения, первое с прозрачным фоном, а второе с черным фоном, чтобы показать проблему более четко :
. Как вы можете видеть, круг вокруг кисти ()действительно раздражающий квадрат, от которого я не могу избавиться.Все, что должно быть видно, это кисть. Это мой код, используемый для получения тех результатов :
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, Y: Integer);
begin
DrawOpacityBrush(Image1.Picture.Bitmap, X, Y, clRed, 50, 85);
end;
, которые производят это на обычном растровом изображении:
Идея, которая у меня была (, основанная на способе Андреаса создания эллипса с непрозрачностью ), заключалась в том, чтобы отобразить типичную кисть на canvas, назначьте его закадровому растровому изображению, а затем перерисуйте его на основное растровое изображение с непрозрачностью. Что работает, за исключением этого раздражающего квадрата по краю.
Как визуализировать кисть с непрозрачностью, как показано на снимках экрана, но без этого квадрата вокруг круга кисти?
Если я установлю Bmp.Transparent := True
, белая рамка останется, но непрозрачности больше не будет. Просто сплошной белый квадрат и сплошной красный круг.