Recent

Author Topic: FloodFill  (Read 486 times)

BubikolRamios

  • Sr. Member
  • ****
  • Posts: 293
FloodFill
« on: August 09, 2024, 09:48:20 am »
White is flood filled black, is this intended that the rest of 1 px black lines are not flooded ?

Code: Pascal  [Select][+][-]
  1.  PaintBox1.Canvas.FloodFill(b.X,b.y,PaintBox1.Canvas.Pixels[b.X,b.y],fsSurface);
  2.  
« Last Edit: August 09, 2024, 09:49:54 am by BubikolRamios »
lazarus 3.2-fpc-3.2.2-win32/win64

Eugene Loza

  • Hero Member
  • *****
  • Posts: 729
    • My games in Pascal
Re: FloodFill
« Reply #1 on: August 09, 2024, 08:13:32 pm »
Looks like it's the default behavior, GIMP does exactly the same way (see screenshot, flood-filled your white with black and then with red).

I believe this happens because flood-fill doesn't do "diagonal" movements, only vertical or horizontal.
My FOSS games in FreePascal&CastleGameEngine: https://decoherence.itch.io/ (Sources: https://gitlab.com/EugeneLoza)

wp

  • Hero Member
  • *****
  • Posts: 12274
Re: FloodFill
« Reply #2 on: August 09, 2024, 08:41:48 pm »
The parameter "fsSurface" fills all horizontally and vertically adjacent pixels having the specified color (https://lazarus-ccr.sourceforge.io/docs/lazutils/graphtype/tgraphicsfillstyle.html). But when you look carefully at the magnified screenshot in the first post you see that there is no connection from the white to the diagonally adjacent black pixels.

What you can do is to iterate over all pixels, check the color and replace black pixels with white. But do not use the Canvas.Pixels[x,y] property if your image has some reasonable size. Instead, convert the bitmap to a LazIntfImage which gives you much faster access to the pixels; at the end convert back to TBitmap. If you post your test image I can write a procedure for this.
« Last Edit: August 09, 2024, 08:45:27 pm by wp »

 

TinyPortal © 2005-2018