Dany (Member)
Pro
Messaggi: 129
Iscritto: 03/05/2012
|
Questo è il prototipo di una funzione che ho fatto per ruotare le immagini in sdl:+
Codice sorgente - presumibilmente C# |
/*RUOTA IMMAGINE DI ALPHA GRADI*/ void Ruota (SDL_Surface* img,SDL_Surface **dst, double alpha) { double dist=0.0; double x=0.0,y=0.0; double x1=0.0,y1=0.0; double beta=0.0; int rx=0,ry=0,ri=0; Uint32 *pixel=(Uint32 *)img->pixels; Uint32 *pixel2=(Uint32 *)(*dst)->pixels; alpha=alpha/(180/3.1415926); for (unsigned int i=0; i<=((img->h)*(img->w)); i++) { x=i%img->w; y=(int)(i/img->w); x=x-(img->w/2); y=(img->h/2)-y; dist=sqrt(pow(x,2)+pow(y,2)); if ((x>=0)&&(y>=0)) beta=asin(y/dist); if ((x<=0)&&(y>=0)) beta=3.1415926-asin(y/dist); if ((x<=0)&&(y<=0)) beta=3.1415926+asin(-y/dist); if ((x>=0)&&(y<=0)) beta=6.2831852-asin(-y/dist); beta=beta+alpha; x1=cos(beta)*dist; y1=sin(beta)*dist; /*FINO QUì FUNZIONA PERFETTAMENTE, OVVERO PER OGNI PUNTO DELL'IMMAGINE, SE NE PRENDONO LE COORDINATE CARTESIANE E VENGONO RUOTATE DI ALPHA GRADI OTTENENDO X1 ED Y1 COME RISULTATO*/ /*X1 E Y1 SONO ANCORA CARTESIANE E PER CONVERTIRLE IN COORDINATE PIXEL HO FATTO COSì*/ rx=x1+img->w/2; ry=img->h/2-y1; /*RI DOVREBBE ESSERE IL PIXEL ATTUALE NELL'ARRAY DELLA SUPERFICE RUOTATA*/ ri=(ry*(*dst)->w)+rx; /*ADESSO ASSOCIO AL PIXEL ATTUALE RUOTATO IL SUO COLORE, INFATTI PIXEL2 è DELLA SUPERFICERUOTATA, PIXEL è DELL'IMMAGINE ORIGINALE.*/ if (ri>=0) pixel2[ri]=pixel[i]; } (*dst)->pixels=pixel2; }
|
Il problema è che ottengo un'immagine sgranata e con colori messi a caso anche se la rotazione viene effettuata correttamente. Suggerimenti?
|