Oppure

Loading
21/01/13 17:16
Dany
Questo è il prototipo di una funzione che ho fatto per ruotare le immagini in sdl:+
/*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?

aaa
31/01/13 13:42
Dany
Problema risolto, se qualcuno fosse interessato ho scritto un articolo:
pierotofy.it/pages/guide_tutorials/CPlusPlus/Rotazione_immagini_con_le_SDL/
aaa