PDA

Visualizza la versione completa : [c e sdl] calcolo strano per trovare il pixel


marcelloma
23-09-2008, 22:27
In questa funzione che restituisce il valore del pixel della superficie
(presa da http://www-ensps.u-strasbg.fr/ensps/files/Projets_de_Maths/SDL/html/guidevideo.htmll )

Uint32 getpixel(SDL_Surface *surface, int x, int y)
{
int bpp = surface->format->BytesPerPixel;
/* Here p is the address to the pixel we want to retrieve */
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
printf(" Surface pitch: %d\n", surface->pitch);
printf(" BytesPerPixel: %d\n", surface->format->BytesPerPixel);
// indirizzo di partenza + y * lunghezza elementi riga +
printf("valori con e senza par: %d %d %d",*((Uint8 *)surface->pixels),*((Uint8 *)surface->pixels + y * surface->pitch + x * bpp),*p);

switch(bpp) {
case 1:
return *p;

case 2:
return *(Uint16 *)p;

case 3:
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
return p[0] << 16 | p[1] << 8 | p[2];
else
return p[0] | p[1] << 8 | p[2] << 16;

case 4:
return *(Uint32 *)p;

default:
return 0; /* shouldn't happen, but avoids warnings */
}
}


Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
in p ho l'indirizzo del pixel ma perche' questo calcolo funziona?
surface->pitch nel mio pc e' 640
surface->pixels e' (penso) l'indirizzo del pixel (0,0) della superficie
bpp nel mio caso e' 1

edit: ho capito tutto lasciate stare e scusate :)

Loading