Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Rotazione immagini SDL
Forum - C/C++ - Rotazione immagini SDL

Avatar
Dany (Member)
Pro


Messaggi: 129
Iscritto: 03/05/2012

Segnala al moderatore
Postato alle 18:16
Lunedì, 21/01/2013
Questo è il prototipo di una funzione che ho fatto per ruotare le immagini in sdl:+
Codice sorgente - presumibilmente C#

  1. /*RUOTA IMMAGINE DI ALPHA GRADI*/
  2. void Ruota (SDL_Surface* img,SDL_Surface **dst, double alpha)
  3. {
  4.         double dist=0.0;
  5.         double x=0.0,y=0.0;
  6.         double x1=0.0,y1=0.0;
  7.         double beta=0.0;
  8.         int rx=0,ry=0,ri=0;
  9.  
  10.         Uint32 *pixel=(Uint32 *)img->pixels;
  11.         Uint32 *pixel2=(Uint32 *)(*dst)->pixels;
  12.        
  13.         alpha=alpha/(180/3.1415926);
  14.  
  15.         for (unsigned int i=0; i<=((img->h)*(img->w)); i++)
  16.         {
  17.                 x=i%img->w;
  18.                 y=(int)(i/img->w);
  19.  
  20.                 x=x-(img->w/2);
  21.                 y=(img->h/2)-y;
  22.  
  23.                 dist=sqrt(pow(x,2)+pow(y,2));
  24.                  
  25.                 if ((x>=0)&&(y>=0))
  26.                         beta=asin(y/dist);
  27.                 if ((x<=0)&&(y>=0))
  28.                         beta=3.1415926-asin(y/dist);
  29.                 if ((x<=0)&&(y<=0))
  30.                         beta=3.1415926+asin(-y/dist);
  31.                 if ((x>=0)&&(y<=0))
  32.                         beta=6.2831852-asin(-y/dist);
  33.                
  34.                 beta=beta+alpha;
  35.  
  36.                 x1=cos(beta)*dist;
  37.                 y1=sin(beta)*dist;
  38.              
  39. /*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*/
  40.  
  41. /*X1 E Y1 SONO ANCORA CARTESIANE E PER CONVERTIRLE IN COORDINATE PIXEL HO FATTO COSì*/
  42.                 rx=x1+img->w/2;
  43.                 ry=img->h/2-y1;
  44. /*RI DOVREBBE ESSERE IL PIXEL ATTUALE NELL'ARRAY DELLA SUPERFICE RUOTATA*/
  45.                 ri=(ry*(*dst)->w)+rx;
  46. /*ADESSO ASSOCIO AL PIXEL ATTUALE RUOTATO IL SUO COLORE, INFATTI PIXEL2 è DELLA SUPERFICERUOTATA, PIXEL è DELL'IMMAGINE ORIGINALE.*/
  47.                 if (ri>=0)
  48.                         pixel2[ri]=pixel[i];
  49.         }
  50.         (*dst)->pixels=pixel2;
  51. }



Il problema è che ottengo un'immagine sgranata e con colori messi a caso anche se la rotazione viene effettuata correttamente. Suggerimenti?


PM Quote
Avatar
Dany (Member)
Pro


Messaggi: 129
Iscritto: 03/05/2012

Segnala al moderatore
Postato alle 14:42
Giovedì, 31/01/2013
Problema risolto, se qualcuno fosse interessato ho scritto un articolo:
http://www.pierotofy.it/pages/guide_tutorials/CPlusPlus/Ro ...

PM Quote