Here's another pixel flood fill routine I did a while back for you to look over...
Graphics 1024,768,32,1 SetBuffer FrontBuffer() Global screen_width = GraphicsWidth() Global screen_height = GraphicsHeight() cx = screen_width / 2 cy = screen_height / 2 r# = 10 For count = 0 To 360 * 20 x1# = cx + Cos(count) * r# y1# = cy + Sin(count) * r# If x2# > 0 And y2# > 0 Then Line x1,y1,x2,y2 x2# = x1# y2# = y1# r# = r# + .05 Next Type fill Field x Field y Field d End Type match_red = 0 match_green = 0 match_blue = 0 fill_red = 255 fill_green = 0 fill_blue = 0 floodfill(10,10,((match_red Shl 16) Or (match_green Shl 8) Or match_blue),((fill_red Shl 16) Or (fill_green Shl 8) Or fill_blue)) While Not KeyHit(1) Wend End Function floodfill(x,y,m,fc) m = ReadPixel(x,y) flood.fill = New fill flood\x = x flood\y = y done = False LockBuffer FrontBuffer() While done = False done = True For flood.fill = Each fill done = False x = flood\x y = flood\y c = ReadPixelFast(x,y) Delete flood If c = m WritePixelFast x,y,fc If y > 0 If ReadPixelFast(x,y - 1) = m flood.fill = New fill flood\x = x flood\y = y - 1 End If End If If y < screen_height - 2 If ReadPixelFast(x,y + 1) = m flood.fill = New fill flood\x = x flood\y = y + 1 End If End If If x > 0 If ReadPixelFast(x - 1,y) = m flood.fill = New fill flood\x = x - 1 flood\y = y End If End If If x < screen_width - 2 If ReadPixelFast(x + 1,y) = m flood.fill = New fill flood\x = x + 1 flood\y = y End If End If End If Next Wend UnlockBuffer FrontBuffer() End Function