Eine Lösung könnte man mit Regionen erreichen.
Einen Schöhnheitspreis kann man damit aner nicht erringen da es kein anti Aliasing oder smooth gibt.
Hier mal ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
TRGBQuadArray = array [0..1024] of TRGBQuad;
PRGBQuadArray = ^TRGBQuadArray;
const
trColor : TRGBQuad = (rgbBlue: 255; rgbGreen: 0; rgbRed: 255; rgbReserved: 0);
var
rg: HRGN;
bmp: TBitmap;
x, y: integer;
LineScan: PRGBQuadArray;
LineScan2: PRGBQuadArray;
begin
bmp := TBitmap.Create;
try
bmp.Width := 127;
bmp.Height := 127;
bmp.PixelFormat := pf32Bit;
Image1.Picture.Bitmap.PixelFormat := pf32Bit;
rg := CreateEllipticRgn(20, 20, 100, 100);
for y := 0 to bmp.Height - 1 do
begin
LineScan := bmp.ScanLine[y];
LineScan2 := Image1.Picture.Bitmap.ScanLine[y];
for x := 0 to bmp.Height - 1 do
begin
if PtInRegion(rg, x, y)
then LineScan[x] := LineScan2[x]
else LineScan[x] := trColor;
end;
end;
Image1.Picture.Bitmap.Assign(bmp);
Image1.Transparent := true;
Image1.Invalidate;
DeleteObject(rg);
finally
bmp.free;
end;
end;