![]() |
TImage Abrunden
Hi,
wie kann man eine TImage abrunden? Also die Kreisförmig ausschauen lassen? |
Re: TImage Abrunden
Indem man ein kreisförmiges Bild hineinlädt? Der Rest ist dann doch transparent und damit unsichtbar. (wenn Transparent auf True steht)
|
Re: TImage Abrunden
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; |
Re: TImage Abrunden
Du benutzt doch wohl nicht ernsthaft die Region, nur um festzustellen, ob sich ein Punkt innerhalb des Kreises befindet? :shock:
Wie wäre es mit dem Satz des Pythagoras oder so? :lol: Wobei ich nicht weiß wie performant die Abfrage ist, aber ich vermute die Regionsfunktionen sind etwas langsamer. |
Re: TImage Abrunden
@jaenicke: Du willst und jetzt sicher zeigen wie man mit dem Satz des Pythagoras feststellen kann ob ein Punkt innerhalb einer Ellipse liegt - viel Spaß :roll:
Bevor du dich über etwas lustig machst prüfe bitte nach ob es auch wirklich möglich ist und zeige lieber die bessere Lösung anstelle dich nur lustig zu machen. |
Re: TImage Abrunden
Zitat:
Von einer Ellipse war erst bei der Regionsfunktion die Rede, die aber hier auch für einen Kreis benutzt wird. |
Re: TImage Abrunden
Und dann wird der Kreis zu einer anderen Form geändert, weil das vielleicht besser aussieht und schon geht die ganze Berechnung von vorne los? Manche haben anscheinend zuviel Zeit.
|
Re: TImage Abrunden
@jaenicke: Mir ging es nicht primär um Kreis oder Ellipse sondern darum, dass es allen mehr hilft eine Lösung bzw. Alternativen aufzuzeigen anstelle nur andere Lösungen schlecht zu machen oder nur in der Theorie zu erzählen das es doch möglich sein sollte.
|
Re: TImage Abrunden
Zitat:
Zitat:
Zitat:
Ich hatte mir das mit den Grgionen mal überlegt mal überlegt um ein Roundrect darzustellen. (Beispiel: ![]() Dort nutze ich SelectClipRgn(); um die sache abzurunden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz