Bien programmer en langage C
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -45%
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre ...
Voir le deal
339 €

[SDL]changer le zoom d'une image

2 participants

Aller en bas

[SDL]changer le zoom d'une image Empty [SDL]changer le zoom d'une image

Message  Mircko 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

Revenir en haut Aller en bas

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

Message  -ed- 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
-ed-
-ed-
Admin
Admin

Messages : 290
Date d'inscription : 26/05/2008
Age : 67
Localisation : Paris 14eme arrondissement (75, France)

http://bien-programmer.fr

Revenir en haut Aller en bas

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

Message  Mircko 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

Revenir en haut Aller en bas

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

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser