Staowrzaylem sobie funkcje zastepujaca Canvas->FloodFill
Problem w tym, ze przy wiekszych obiektach do zamalowania wywala mi Stack overflow, no ale niby dlaczemu. Kto by mi pomogl to poprawic albo wskazac miejsce gdzie nie powinienem czegos powtarzac czy cos...
//fill Color on X,Y if is fimilar to Base Color with Fill Color
void __fastcall PC_EYE_TOOL::FillNext(Graphics::TBitmap *bmp, int X, int Y,
int Fr,int Fg, int Fb, int BaseR, int BaseG, int BaseB)
{
if ( (X < 0) || (X == bmp->Width) || (X < 0) || (Y == bmp->Height) || (Y < 0) ) return;
float dist,angle;
Byte * p;
p = (Byte*)bmp->ScanLine[Y];
int r = p[X*4+2];
int g = p[X*4+1];
int b = p[X*4+0];
if ( !( (r == Fr) && (g == Fg) && (b == Fb) ) ) {
ReturnCOLOR_DIST_AND_ANGLE(r,g,b,BaseR,BaseG,BaseB,dist,angle);
if ( (dist < 15.0f) && (angle < 30.0f) )
{
p[X*4+2] = Fr;
p[X*4+1] = Fg;
p[X*4+0] = Fb;
FillNext(bmp,X-1,Y,Fr,Fg,Fb,BaseR,BaseG,BaseB);
FillNext(bmp,X+1,Y,Fr,Fg,Fb,BaseR,BaseG,BaseB);
FillNext(bmp,X,Y-1,Fr,Fg,Fb,BaseR,BaseG,BaseB);
FillNext(bmp,X,Y+1,Fr,Fg,Fb,BaseR,BaseG,BaseB);
}
}
}
void __fastcall PC_EYE_TOOL::FillColor(Graphics::TBitmap *bmp, int X, int Y, int Fr,int Fg, int Fb)
{
Byte * p;
p = (Byte*)bmp->ScanLine[Y];
int r = p[X*4+2];
int g = p[X*4+1];
int b = p[X*4+0];
float dist;
float angle;
if (! ( (r == Fr) && (g == Fg) && (b == Fb) ) ) {
p[X*4+2] = Fr;
p[X*4+1] = Fg;
p[X*4+0] = Fb;
FillNext(bmp,X-1,Y,Fr,Fg,Fb,r,g,b);
FillNext(bmp,X+1,Y,Fr,Fg,Fb,r,g,b);
FillNext(bmp,X,Y-1,Fr,Fg,Fb,r,g,b);
FillNext(bmp,X,Y+1,Fr,Fg,Fb,r,g,b);
}
}
</cpp>