[SDL]changer le zoom d'une image
2 participants
Page 1 sur 1
[SDL]changer le zoom d'une image
[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)
une fonction pour obtenir un pixel:
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...
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;
}
- 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
Re: [SDL]changer le zoom d'une image
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é.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)une fonction pour obtenir un pixel:
- Code:
#define setPixel32(surface, x, y, couleur) \
{Uint32 *p = surface->pixels + (y) * surface->pitch + (x) * 4; \
*p = couleur;}et la fonction qui ne fonctionne pas bien:
- Code:
Uint32 getPixel_32(SDL_Surface *surface, int x, int y)
{
Uint32 *p = (surface->pixels + y * surface->pitch + x * 4);
return *p;
}Alors ça compile, si j'affiche l'image, elle est de la bonne taille mais
- 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)))
}
}
-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...
certains ont estimé que je ne servais à rien, alors je ne vais pas les contrarier...
P.S.: dommage que tu ne sois plus sur le siteduzero -ed-, on te regrette beaucoup sur le forum c...
Dernière édition par -ed- le Ven 10 Juil 2009 - 12:03, édité 1 fois
Re: [SDL]changer le zoom d'une image
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:
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
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|