Witam.
mam pewną funkcję do której jako jeden z parametrów przekazuję adres początkowy tablicy 2D (w zasadzie jest to bitmapa). I teraz jak 'normalnie' zadeklarować w moim przypadku zmienną 'src' jako zmienną tablicową 2D (tak żeby można było z niej korzystać tak jak w przykładzie czyli src[y][x])? W zasadzie to moja funkcja już działa ale tak trochę po partyzancku.
PS. #1 - Przy okazji chciałbym się zapytać czy obecne kompilatory potrafią to skompilować tak jakbym używał pointerów czy lepiej jest to przepisać pod arytmetykę pointerów? Aktualnie korzystam z tablicy bo jest to łatwiejsze w edycji.
2# - Korzystając z tej funkcji zauważyłem, że jak nie wyczyszczę tablicy 'q' i 'b' to pozostają śmieci po poprzednim obrazie a spodziewałem się, że sama deklaracja wystarczy aby wyzerować tablicę. Ktoś może mi wyjaśnić o co tutaj chodzi? (moje funkcje są kompilowane do .dll a następnie wywoływanie w Autohotkey)
#3 - Jakiś ogólne rady co zrobiłem źle w tej funkcji, pomijając kwestię samego algorytmu? Z c korzystam sporadycznie.
void _FloodFillExcept(int w,int h,uint32_t src[h][w],int x,int y,uint32_t newColor,uint32_t exceptColor,struct _bound *Frame){
struct PT q[w*h];
for(int i=0;i<w*h;i++){
q[i] = (struct PT){0,0};
}
int b[w][h];
for(int i=0;i<w;i++){
for(int j=0;j<h;j++){
b[i][j] = 0;
}
}
uint64_t i = 0;
if (src[y][x]==exceptColor)
return;
q[++i] = (struct PT){x,y} ,b[x][y] = 1;
Frame->L = (struct PT){x,y};
Frame->R = (struct PT){x,y};
Frame->U = (struct PT){x,y};
Frame->D = (struct PT){x,y};
w--;
h--;
while(i>0){
struct PT p = q[i--];
x = p.x;
y = p.y;
if (x<Frame->L.x) Frame->L = (struct PT){x,y};
if (x>Frame->R.x) Frame->R = (struct PT){x,y};
if (y<Frame->U.y) Frame->U = (struct PT){x,y};
if (y>Frame->D.y) Frame->D = (struct PT){x,y};
src[y][x] = newColor;
if ( (x<w) && (b[x+1][y]!=1) && (src[y][x+1]!=exceptColor) )
q[++i] = (struct PT){x+1,y} ,b[x+1][y] = 1;
if ( (x>0) && (b[x-1][y]!=1) && (src[y][x-1]!=exceptColor) )
q[++i] = (struct PT){x-1,y} ,b[x-1][y] = 1;
if ( (y<h) && (b[x][y+1]!=1) && (src[y+1][x]!=exceptColor) )
q[++i] = (struct PT){x,y+1} ,b[x][y+1] = 1;
if ( (y>0) && (b[x][y-1]!=1) && (src[y-1][x]!=exceptColor) )
q[++i] = (struct PT){x,y-1} ,b[x][y-1] = 1;
}
}