Обзор
Из библиотеки GR32 я использую TImgView32 для рендеринга сетки, которая будет моим прозрачным фоном:
Внутри TImgView32 у меня есть регулярный TImage, где я буду рисовать на холсте, что-то вроде этого:
Task
То, что я хотел бы достичь, - это возможность установить непрозрачность кисти, позволяя в дальнейшем использовать возможности редактирования изображений в моей программе. Вместо того, чтобы рисовать один плоский цвет, установка непрозрачности кисти позволяет использовать различные уровни глубины цвета и т.д.
Я нашел этот вопрос раньше, ища вокруг: Нарисовать непрозрачность эллипса в 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;
который создает это на обычном растровом изображении:
Идея, которую я использовал (на основе Андреаса для создания эллипса с непрозрачностью), заключалась в том, чтобы отобразить типичную кисть на холсте, назначить ее внеэкранному растровому изображению, а затем перерисовать ее на основной растровый рисунок с непрозрачностью. Который работает, за исключением того, что раздражает квадрат вокруг края.
Как сделать кисть с непрозрачностью, как показано на скриншотах, но без этого квадрата вокруг круга кисти?
Если я установил Bmp.Transparent := True
, все еще есть белый ящик, но без прозрачности. Просто сплошной белый квадрат и сплошной красный круг.