Thema: Delphi TImage Abrunden

Einzelnen Beitrag anzeigen

Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: TImage Abrunden

  Alt 20. Jul 2009, 07:09
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat