[SDL]changer le zoom d'une image

Voir le sujet précédent Voir le sujet suivant Aller en bas

[SDL]changer le zoom d'une image

Message  Mircko le Ven 10 Juil 2009 - 0:32

[merci d'utiliser les balises de code]
Bonsoir à tous!
J'ai appris le C sur le siteduzero et en ce moment j'entreprends d'enrichir moi-même la SDL pour mes futurs programmes(jeux bien sûr : ) )
J'ai un problème pour une fonction pour créer un double d'une image mais zoomée différemment.
alors voici le code:
une macro pour définir un pixel(Macro pour accélérer)
Code:
#define setPixel32(surface, x, y, couleur) \
            {Uint32 *p = surface->pixels + (y) * surface->pitch + (x) * 4;  \
            *p = couleur;}

une fonction pour obtenir un pixel:
Code:
Uint32 getPixel_32(SDL_Surface *surface, int x, int y)
{
      Uint32 *p = (surface->pixels + y * surface->pitch + x * 4);
      return *p;   
}
et la fonction qui ne fonctionne pas bien:
Code:
SDL_Surface* resize(SDL_Surface *source, float zoom)
{
 int hauteur, largeur, x, y;
 SDL_Surface *laNew = SDL_CreateRGBSurface(SDL_HWSURFACE, largeur = (int)(source->w * zoom), hauteur = (int)(source->h * zoom), 32, 0, 0, 0, 0);       
 for(y = 0; y < hauteur; y++)
 {
      for(x = 0; x < largeur; x++)
      {
            setPixel32(laNew, x, y, getPixel_32(source, (int)(x / zoom), (int)(y / zoom)))
      }                                                           
     
 }

Alors ça compile, si j'affiche l'image, elle est de la bonne taille mais
-le zoom ne se fait que verticalement
-il y a des lignes colorées verticales un peu partout
Je pense que le problème vient de obtenirPixel() parce qu'ailleurs je vois pas trop...
Merci d'avance!
P.S.: dommage que tu ne sois plus sur le siteduzero -ed-, on te regrette beaucoup sur le forum c...

Mircko

Messages : 2
Date d'inscription : 10/07/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: [SDL]changer le zoom d'une image

Message  -ed- le Ven 10 Juil 2009 - 1:42

Mircko a écrit:Bonsoir à tous!
J'ai appris le C sur le siteduzero et en ce moment j'entreprends d'enrichir moi-même la SDL pour mes futurs programmes(jeux bien sûr : ) )
J'ai un problème pour une fonction pour créer un double d'une image mais zoomée différemment.
alors voici le code:
une macro pour définir un pixel(Macro pour accélérer)
Code:
#define setPixel32(surface, x, y, couleur) \
            {Uint32 *p = surface->pixels + (y) * surface->pitch + (x) * 4;  \
            *p = couleur;}   
une fonction pour obtenir un pixel:
Code:
Uint32 getPixel_32(SDL_Surface *surface, int x, int y)
{
      Uint32 *p = (surface->pixels + y * surface->pitch + x * 4);
      return *p;   
}
et la fonction qui ne fonctionne pas bien:
Code:
SDL_Surface* resize(SDL_Surface *source, float zoom)
{
 int hauteur, largeur, x, y;
 SDL_Surface *laNew = SDL_CreateRGBSurface(SDL_HWSURFACE, largeur = (int)(source->w * zoom), hauteur = (int)(source->h * zoom), 32, 0, 0, 0, 0);       
 for(y = 0; y < hauteur; y++)
 {
      for(x = 0; x < largeur; x++)
      {
            setPixel32(laNew, x, y, getPixel_32(source, (int)(x / zoom), (int)(y / zoom)))
      }                                                           
     
 } 
Alors ça compile, si j'affiche l'image, elle est de la bonne taille mais
-le zoom ne se fait que verticalement
-il y a des lignes colorées verticales un peu partout
Je pense que le problème vient de obtenirPixel() parce qu'ailleurs je vois pas trop...
Je ne connais pas SDL. Le code a l'air correct du point de vue du C, mais je ne connais pas bien les mécanismes du graphisme. Je ne sais donc pas dire si ton algo est correct. Désolé.

P.S.: dommage que tu ne sois plus sur le siteduzero -ed-, on te regrette beaucoup sur le forum c...
certains ont estimé que je ne servais à rien, alors je ne vais pas les contrarier...


Dernière édition par -ed- le Ven 10 Juil 2009 - 12:03, édité 1 fois

_________________
C is a sharp tool !

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: [SDL]changer le zoom d'une image

Message  Mircko le Ven 10 Juil 2009 - 11:31

Merci -ed- d'avoir répondu si vite.
Alors j'ai trouvé le problème. C'était bien du à ma fonction obtenirPixel(). l'image à zoomer que j'ai chargé utilisait 3 octets pour stocké un pixel et ma fonction faisait comme si c'était 4...
Donc pour corriger:
Code:
Uint32 getPixel(SDL_Surface *surface, int x, int y)
{
      Uint32 *p = (Uint32 *)(surface->pixels + y * surface->pitch + x * surface->format->BytesPerPixel);
      return *p;   
}

Mircko

Messages : 2
Date d'inscription : 10/07/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: [SDL]changer le zoom d'une image

Message  Contenu sponsorisé Aujourd'hui à 15:28


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum