AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TCanvas.FloodFill funktioniert nicht, wie erwartet
Thema durchsuchen
Ansicht
Themen-Optionen

TCanvas.FloodFill funktioniert nicht, wie erwartet

Ein Thema von s-off · begonnen am 15. Nov 2007 · letzter Beitrag vom 12. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
s-off
(Gast)

n/a Beiträge
 
#1

TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 15:19
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:
      //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);
Hier wird ein Roundrect gezeichnet. Der Rahmen ist schwarz, die 'Füllung' weiß.
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?
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#2

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 15:50
Zitat von s-off:
Der Punkt 'iX1 + 1, iY1 + 1' liegt definitiv innerhalb des RoundRect und hat die Farbe 'weiß'.
Was mache ich falsch?
Hallo,

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
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 15:55
nimm mal statt +1 +10 oder mehr, damit du über die Rundung kommst.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#4

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 17:19
Ach Du meine F*esse
Das klingt natürlich vollkommen einleuchtend! Werde es gleich mal ausprobieren!
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#5

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 17:38
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);
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 17:41
Du musst vorher Canvas.Brush.Color auf die Farbe setzen, mit der gefüllt werden soll (soweit ich das in Erinnerung habe)
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 20:29
Zitat von Progman:
Du musst vorher Canvas.Brush.Color auf die Farbe setzen, mit der gefüllt werden soll (soweit ich das in Erinnerung habe)
Das mache ich doch in Zeile 6 - oder meinst Du etwas anderes?
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 20:42
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.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#9

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 20:47
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.
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#10

Re: TCanvas.FloodFill funktioniert nicht, wie erwartet

  Alt 15. Nov 2007, 20:51
wäre ja durchaus möglich, dass dieser Canvas kein FloodFill unterstützt?
Denn ansonsten ist kein Fehler im Code.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz