Liste des Groupes | Revenir à cl c |
Michael S <already5chosen@yahoo.com> writes:>
[...]On 16/03/2024 04:11, fir wrote:
>i was writing simple editor (something like paint but more custom
for my eventual needs) for big pixel (low resolution) drawing
>
it showed in a minute i need a click for changing given drawed area
of of one color into another color (becouse if no someone would
need to do it by hand pixel by pixel and the need to change color
of given element is very common)
>
there is very simple method of doing it - i men i click in given
color pixel then replace it by my color and call the same function
on adjacent 4 pixels (only need check if it is in screen at all and
if the color to change is that initial color
>
int RecolorizePixelAndAdjacentOnes(int x, int y, unsigned
old_color, unsigned new_color)
{
if(old_color == new_color) return 0;
>
if(XYIsInScreen( x, y))
if(GetPixelUnsafe(x,y)==old_color)
{
SetPixelSafe(x,y,new_color);
RecolorizePixelAndAdjacentOnes(x+1, y, old_color, new_color);
RecolorizePixelAndAdjacentOnes(x-1, y, old_color, new_color);
RecolorizePixelAndAdjacentOnes(x, y-1, old_color, new_color);
RecolorizePixelAndAdjacentOnes(x, y+1, old_color, new_color);
return 1;
}
>
return 0;
}
Except I don't understand why it works it all.It is customary in raster graphics to count pixels as adjacent
Can't fill area have sub-areas that only connected through diagonal?
only if they share an edge, not if they just share a corner.
Usually that gives better results; the exceptions tend to need
special handling anyway and not just connecting through
diagonals.
Les messages affichés proviennent d'usenet.