Floodfill will nicht wie ich moechte
-
Also ich hab ein Bild reingeladen in die Bitmap Komponente.
Dort passe ich die Farben an. Denke ich zumindest.
Alles was nicht ganz schwarz ist wird 0 und alles andere weiss.Handelt sich also um ein Chromatisches Bild.
Nun soll alles was weiss ist eingefaerbt werden, damit ich nur noch weisse Flecken hab. Aber das Floodfill will nicht.
Vorher hab ich die Zeichenfarbe mittels
Canvas->Pen->Color = clBlack gesetzt.
FloodFill(0,0,clBlack,fsBorder) sollte doch alles was nicht schwarz ist auch fuellen.
Hab ich vergessen das Bild dann neu zeichnen zu lassen ?
Glaub schon...
mittels Repaint will es nicht.
Was muss ich da machen das es mir gezeichnet wird ?msgbeep
-
Du musst natürlich über die beiden Parameter
FloodFill(int X, int Y, TColor Color, TFillStyle FillStyle)
X und Y einen Punkt angeben, der sich in einer weissen Fläche befindet.
-
Ich bin davon ausgegangen, dass das Koordinaten Paar X=0,Y=0 ein solcher weisser Punkt ist, da es folgender Massen angelegt wird.
...->Canvas->Brush->Color = clWhite;
...->Canvas->FillRect(Rect(0,0,500,500));Wie man sieht, stehen da ...(0,0,... drin.
Aber es kann ja sein, dass es nicht so ist, wie es sein sollte.
Deswegen mache ich mal den Test mit 1,1.Und siehe da, es geht. Aber warum nicht mit 0,0 als startpunkt ??? Egal...
Aber Floodfill scheint nicht richtig zu fuellen.
Mittels fsBorder wird natuerlich alles schwarz, was weiss ist, da auch der Innenteil nach der schwarzen Linie weiss ist. Allerdings ist mit fsSurface ein anderer Effect. Es gibt weisse Restflecken oder gar Stellen, die eigentlich nicht sein sollten.
Woran kann es da noch liegen ???msgbeep
-
Du scheinst nicht genau zu wissen, was FloodFill genau macht.
Deine Annahme:
Alle weißen Bereiche werden mit der gewünschten Farbe gefüllt.Richtigstellung (Bei fsBorder):
Von dem Punkt ausgehend, den du angibst, werden alle umliegenden Punkte solange umgefärbt, solange die fsBorder-Farbe nicht auftritt. Wenn also mehrere weiße Flächen vorhanden sind, diese aber durch die fsBorder-Farbe voneinander getrennt werden, so kannts du nicht mit einem einzigen FloodFill-Befehl alles umfärben. Du müßtest alle weißen Flächen lokalisieren und in ihnen dann jeweils 'nen FloodFill durchführen... ...oder du machst es auf anderem WegeP.S.: Mit der Koordinatenangabe (0|0) muss es auch gehen. Bei deiner Methode sollte dieser Punkt natürlich nicht die fsBorder-Farbe haben.