Pour changer la taille d'une surface, il suffit de changer son attribut h ou w :
SDL_Surface *test = NULL;
test = Load_BMP("monImage.bmp");
test->w = 100; /* Change la longueur */
test->h = 100; /* Change la hauteur */
Cependant cela tronque l'image pour arriver à la bonne taille, si tu souhaites la garder entière en la redimensionnant alors je te conseil d'utiliser SDL_gfx et sa fonction rotozoom.
Pour changer la taille d'une surface, il suffit de changer son attribut h ou w :
SDL_Surface *test = NULL;
test = Load_BMP("monImage.bmp");
test->w = 100; /* Change la longueur */
test->h = 100; /* Change la hauteur */
Cependant cela tronque l'image pour arriver à la bonne taille, si tu souhaites la garder entière en la redimensionnant alors je te conseil d'utiliser SDL_gfx et sa fonction rotozoom.
Ce que tu proposes est extrêmement déconseillé : tu perds la cohérence entre l'image pure (le tableau de pixels ne bouge pas) et les données w et h. Meme si - je pense - le pitch peut te sauver, c'est a éviter absolument.
Pour tronquer un bout d'image, on preferera recréer une surface, et faire un blit partiel dessus.
Quand au redimensionnement, il faut calculer ça sur les pixels. J'ai un exemple a la main sur mon site web, sinon, la lib SDL_gfx te permet de faire ça.
Ce que tu proposes est extrêmement déconseillé : tu perds la cohérence entre l'image pure (le tableau de pixels ne bouge pas) et les données w et h. Meme si - je pense - le pitch peut te sauver, c'est a éviter absolument.
Pour tronquer un bout d'image, on preferera recréer une surface, et faire un blit partiel dessus.
La solution du site web de fvirtman est pas mal et fonctionne.
MAIS: La fonction a des problèmes à traitre la transparance. Quand j'ai ajouté un canal alpha à la fonction Strechblit juste avant le blit, seulement une partie de l'image est rendue transparente. Voici au zoom normal:
Et voici en zoom agrandi:
Tout le bleu devrait être supprimé. Comment faire?
Je revois cette question revenir de temps en temps.
"Redimensionnement avec SDL en fonction de la résolution."
Ce qui cloche, c'est le "en fonction de la résolution". Les programmes avec choix de résolution ont été inventés (démocratisés pour être exact), avec l'arrivée de la 3D.
En effet, en 3D, la résolution, on s'en tape : la carte graphique adapte, la résolution n'est qu'un paramètre, tout s'adapte.
SDL, c'est la vieille école, bien 2D. A l'époque, les jeux et applications définissaient une résolution "standard" une fois pour toutes, et a part quelques exceptions, on ne la changeait pas.
Le problème est que les programmeurs actuels utilisent un SDL de la vieille école, et essaient de reproduire ce qu'ils voient qui est fait avec des librairies 3D Anachronisme...
ton probleme est que lorsque tu demande de rendre le bleu transparent, tu demande UN bleu. Or, les couleur dans ton image sont des NUANCE de bleu, nuance introduit par paint (a moins que paint.net ne fasse pas ca).
Prend un .png ou .bmp carrement, met un bleu uniforme tout autour et tu devrai plus avoir de pb
C'est un bleu constant... :S
Si je n'utilise pas la fonction pour retailler, la transparence marche parfaitement. Mais avec la fonction, ça donne cet aspect difficile.
Désolé j'avais remarqué trop tard. Je vais le changer tout de suite.
SDL changer taille d'une image
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html