![]() |
TCanvas.FloodFill funktioniert nicht, wie erwartet
Hallo,
ich zeichne ein RoundRect; dieses wird sofort mit der in Brush.Color definierten Farbe ausgefüllt. Anschließend möchte ich das RoundRect mit einer anderen Farbe ausfüllen; dazu benutze ich folgenden Code, der allerdings nicht funktioniert:
Delphi-Quellcode:
Hier wird ein Roundrect gezeichnet. Der Rahmen ist schwarz, die 'Füllung' weiß.
//Normales RoundRect zeichnen (Hintergrundfarbe weiß)
MyCanvas.Brush.Color := clWhite; MyCanvas.RoundRect(iX1, iY1, iX + iX2, iY + iY2, iRundung, iRundung); //Irgendwann später dann FloodFill mit rot drüber MyCanvas.Brush.Color := clRed; MyCanvas.FloodFill(iX1 + 1, iY1 + 1, MyCanvas.Pixels[iX1 + 1, iY1 + 1], fsSurface); FloodFill soll dieses RoundRect nun rot ausfüllen. Der Punkt 'iX1 + 1, iY1 + 1' liegt definitiv innerhalb des RoundRect und hat die Farbe 'weiß'. Durch fsSurface sollte nun eigentlich solange in alle Richtungen mit rot gemalt werden, bis eine andere Farbe als 'weiß' 'im Wege' steht - es passiert aber nichts - der komplette Hintergrund des RoundRect bleibt weiß. Was mache ich falsch? |
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
Zitat:
wenn dieser Punkt innerhalb liegt, ist es kein RoundRect - höchstens eines, das zu einem normalen Rechteck entartet ist. Wenn das Eck abgerundet ist, müsste der Punkt auf dem Rand liegen oder ausserhalb. Gruss Reinhard |
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
nimm mal statt +1 +10 oder mehr, damit du über die Rundung kommst.
|
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
Ach Du meine F*esse :?
Das klingt natürlich vollkommen einleuchtend! Werde es gleich mal ausprobieren! |
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
Hallo nochmal,
leider hat das auch nicht geholfen. Habe mir nun mal an dem zu prüfenden Punkt eine Linie ausgegeben, um zu sehen, ob er inerhalb des RoundRects liegt - ist nun bei diesem Beispiel der Fall. Leider bleibt der Inhalt des RoundRects noch immer weiß - zum verzweifeln - *heul* :(
Delphi-Quellcode:
//Normales RoundRect zeichnen (Hintergrundfarbe weiß)
MyCanvas.Brush.Color := clNone; MyCanvas.RoundRect(iX1, iY1, iX1 + iX2, iY1 + iY2, iRundung, iRundung); //Danach FloodFill rot drüber MyCanvas.Brush.Color := clRed; //liegt Punkt im RoundRect? // MyCanvas.MoveTo(iX1 + 260, iY1 + 20); // MyCanvas.LineTo(iX1 + 260 + 30, iY1 + 20); MyCanvas.FloodFill(iX1 + 260, iY1 + 20, MyCanvas.Pixels[iX1 + 260, iY1 + 20], fsSurface); |
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
Du musst vorher Canvas.Brush.Color auf die Farbe setzen, mit der gefüllt werden soll (soweit ich das in Erinnerung habe)
|
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
Zitat:
|
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
Sorry, hab ich gar nicht gesehen...
Aber was ist oC.Pixels[iX1 + 260, iY1 + 20] ? An dieser Stelle sollte die Farbe hin, die durch Brush.Color ersetzt wird. Da müsste auch Canvas.Pixels[..,..] stehen. |
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
Upsi,
oC ist der eigentliche Name des Canvas. Habe es nur in MyCanvas geändert, um das Ganze hier deutlicher zu machen, und um nicht die Variablendeklaration hier mit posten zu müssen. Im Quellcode ist alles auf oC. Diese eine Stelle hatte ich beim reinkopieren hier vergessen, zu ändern. Das seltsame ist, dass es in einem einfachen nachgebauten Programm funktioniert, wenn ich auf das Canvas einer TForm male. Bei meinem Problem handelt es sich allerdings um eine Druckroutine in ein PDF-Dokument. Hmm, vielleicht liegt dort der Hase begraben. |
Re: TCanvas.FloodFill funktioniert nicht, wie erwartet
wäre ja durchaus möglich, dass dieser Canvas kein FloodFill unterstützt?
Denn ansonsten ist kein Fehler im Code. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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