¿Cómo pintar sobre un lienzo con transparencia y opacidad?

Visión general

Desde la biblioteca GR32, estoy usando TImgView32 para renderizar una cuadrícula que será mi fondo transparente, como:

Colocado dentro de TImgView32 Tengo un TImage regular, donde dibujaré en el lienzo, algo como esto:

Tarea

Lo que me gustaría lograr es la capacidad de establecer la opacidad del pincel, lo que me brinda más posibilidades para editar imágenes en mi programa. En lugar de dibujar un color plano, establecer la opacidad del pincel permite diferentes niveles de profundidad de color, etc.

Encontré esta pregunta antes mientras buscaba alrededor:Dibuja la elipse de opacidad en Delphi 2010 - Andreas Rejbrand ha proporcionado algunos ejemplos en su respuesta a esa pregunta.

He mirado lo que hizo Andreas y se me ocurrió mi propio intento simplificado, pero tengo un problema. Eche un vistazo a estas dos imágenes siguientes, la primera con el fondo transparente y la segunda con un fondo negro para mostrar el problema con mayor claridad:

Como puede ver, alrededor del pincel (círculo) es un cuadrado realmente molesto del que no puedo deshacerme. Todo lo que debe ser visible es el pincel. Este es mi código usado para producir esos resultados:

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;

que produce esto en un mapa de bits regular:

La idea que tuve (basada en la forma de Andreas de crear una elipse con opacidad) era representar un pincel típico en el lienzo, asignarlo a un mapa de bits fuera de pantalla y luego volver a dibujarlo en el mapa de bits principal con la opacidad. Lo que funciona, excepto ese cuadrado molesto alrededor del borde.

¿Cómo puedo representar un pincel con opacidad como se ilustra en las capturas de pantalla, pero sin ese cuadrado alrededor del círculo del pincel?

Si pongoBmp.Transparent := True Todavía hay una caja blanca, pero ya no hay opacidad. Solo un cuadrado blanco sólido y un círculo rojo relleno sólido.

Respuestas a la pregunta(1)

Su respuesta a la pregunta