:: PlayerAdvance.org ::

:: PlayerAdvance.org :: (http://www.playeradvance.org/forum/index.php)
-   Aide au développement (http://www.playeradvance.org/forum/forumdisplay.php?f=185)
-   -   PSP Aide Comment afficher des images sur une autre avec fond transparent ? (http://www.playeradvance.org/forum/showthread.php?t=25922)

Akabane87 02/07/2008 00h05

Comment afficher des images sur une autre avec fond transparent ?
 
Bonjour à tous,
oui, je sais, le titre est un peu long ;) , mais c'est aussi la raison pour laquelle je n'ai pas trouvé de réponses sur le net.
En fait, pour résumer la situation, j'ai besoin d'enregistrer un png de taille 128*192 ou moins selon le mode, ayant un fond transparent plus un canal alpha.
Et c'est là que se pose tout le problème... :bave:
J'ai essayé de créer une image transparente, de la passer en buffer pricipal à la place de l'écran, puis d'écrire dessus toutes mes images avant de repasser au buffer par défaut (l'écran) avant d'afficher cette image dessus. Du coup, en théorie :S, je n'ai qu'a envoyer cette même image à la fonction d'écriture dans un fichier png.
Bon, vous l'aurez deviné, ça ne marche pas du tout :cry:. Le problème est qu'on ne peut pas avoir une image transparente et dessiner des images dessus (ou alors je n'ai pas trouvé v_v). En fait je me suis aperçu que tout ce que j'affiche par dessus à la transparence donnée par la valeur du canal apha de la couleur servant à nettoyer l'image.
Sinon, j'ai bien essayé de mettre de la transparence 1 bit sur l'image, mais si je la nettoie avec cette couleur, elle n'est pas remplacée par de la transparence :ranting:.

Ah, et dernier point, j'ai essayé en dernier recours de créer ma fonction d'enregistrement de png afin de remplacer la couleur de fond de l'image envoyée par de la transparence, mais vu que j'utilise le filtre bilinéaire (à cause d'un dézoom), j'ai une magnifique oréole de la couleur de fond qui reste (logique!) <_<. C'est donc pour cela qu'il me faut absolument être capable de dessiner sur une image déjà transparente, afin de garder telle quelle le canal alpha de mes différentes images à afficher dessus :bravo:.

Merci d'avance pour la solution à ce méga problème de fou qui est en train de me rendre aussi fou >_<.

ps: pour les curieux, c'est pour mon petit Sprite Maker XP :wub:

daaa57150 02/07/2008 10h39

salut,

de base la psp ne permet pas de faire ca, je m'en suis sorti en écrivant ma propre fonction dessin d'image sur une autre image, tu peux la voir sur ce topic:
http://www.playeradvance.org/forum/s...ead.php?t=5794

topic qui se trouve dans le sous forum "OSLib", qui je pense aurait dû accueillir ton message.

voila j'espère que ca t'aidera, dis moi ce que ca donne.

Akabane87 02/07/2008 11h26

Merci beaucoup,
je craignais d'en arriver là, mais puisque tu me proposes gentiment ta fonction, je ne vais pas dire non :whst:. Je dois dire que je ne me sentais pas d'écrire une telle fonction simplement pour un simple portage de mon programme :D.
Je teste tout ça et je te dis ce qu'il en est.
(Et merci encore... au moins ta fonction aura fini par servir à quelqu'un ! :fleur:)

PS: Si je n'avais pas eu à récupérer absolument une image avec fond transparent, mais simplement à afficher cette image sur l"écran, j'aurais utilisé ma méthode de bidouille habituelle :p : affichage du contenu de l'écran à l'endroit ou je veux afficher l'image sur cette image, et ensuite, j'affiche tout dessus, avant de tout afficher à l'écran. C'est une petite astuce assez rapide qui permet de ne plus se soucier de la transparence de fond de l'image intermédiaire :lol:.


edit: Intéressant comme résultat :huh:... je ne comprend pas vraiment comment une telle chose a pu arriver, mais mon sprite est comment dire ... semi transparent :whst:. On voit toutes les couches par semi-transparence, ce qui fait que l'on a l'impression que le sprite est habillé avec des vetements très ... transparents ... Je vais finir par devoir sensurer des parties de la planche de sprite moi, si ça continue :w00t:. Nan plus sérieusement, c'est vraiment très lent comme fonction, et cet effet de transparence est assez gênant. Je vais revenir au mode bidouille je pense. Merci quand meme pour cette fonction. Elle me servira peut être dans un futur proche :-'

daaa57150 02/07/2008 13h57

ah tiens, il y a encore des erreurs dans cette fonction alors :) je peux voir ton resultat?

Akabane87 02/07/2008 14h31

arf, désolé j'ai tout modifié le code. Mais imagine simplement une planche de sprite RPG Maker XP décomposée en éléments élémentaires, tel que le corps (nu), les yeux, les cheveux, le pantalon, le T-shirt et les chaussures,avec chaque élément en semi-transparence (environ 128 je pense). C'est assez violent :lol:. Surtout pour les cheveux qui sont plus clair sur toute la surface juste au dessus du crane (puisque la peau est claire). Enfin bref ça fait très voyeurisme <_<. J'ai pas vraiment regardé ta fonction en profondeur, donc je peux pas vraiment te dire ce qui fait ça. En fait je dois dire que ça commence à me gonfler... Je pense que je vais désactiver le filtre bilinéaire et transformer tous les pixels de la couleur de fond en transparence max lors de l'enregistrement en png. Et tant pis si c'est moche >(. Ca fais maintenant 2 jours que je bloque la dessus et j'ai des projets en cours beaucoup plus intéressants :ranting:.
C'est dommage parce-qu'il me fallait juste une fonction qui puisse afficher plusieurs images (avec canal alpha) sur une image avec fond transparent. :snif2:

daaa57150 02/07/2008 15h20

je connais pas sprite RPG Maker XP mais si tu veux partager les images que t'essaies de superposer je veux bien essayer parce que ca m'intrigue.

Akabane87 02/07/2008 15h41

^^ normal que tu ne connaisses pas, c'est SpriteMakerXP le nom de mon programme (dernière version: 1.02). C'est en fait un générateur de sprite au format RPG Maker XP. Tu devrais le trouver facilement en téléchargement avec google (je sais pas si j'ai le droit de mettre des lien directement sur le forum et de toute façon je ne l'ai plus sous la main :ange: ). Mais de toute façon, le problème ne réside pas dans les images elles-mêmes, mais dans la façon de gérer le canal alpha de l'image png à générer. Les images de bases ont juste un fond uni sans aucun canal alpha. C'est juste lors du redimensionnement de l'image après avoir définit la couleur de fond comme transparente que le canal est créé.

daaa57150 02/07/2008 16h01

ah oui c'est vrai que dans ma fonction j'avais pas géré la couleur transparente, je me basais que sur le canal alpha.
avant d'utiliser ma fonction, tu dois nettoyer la couleur transparente des images que tu dessines dessus (met à cette couleur un alpha=0) et là ca devrait marcher.
et je suppose que ton filtre bilinéaire tu l'appliques bien après nettoyage de la couleur de fond, parce que sinon, tu as bien remarqué l'oréole.
bref si tu y arrives toujours pas, je réitère ma proposition de t'aider en essayant avec tes images.

Akabane87 02/07/2008 18h03

Merci, c'est très gentil de ta part de me proposer de m'aider, mais je vais désactiver le filtre bilinéaire. Après tout il n'apporte pas grand chose de plus pour une image de la taille de ce que je veux obtenir.

daaa57150 03/07/2008 11h41

ok comme tu veux.;)

daaa57150 18/07/2008 19h31

j'ai corrigé ma fonction si ca t'intéresse:
http://www.playeradvance.org/forum/s...ead.php?t=5794


Fuseau horaire GMT +2. Il est actuellement 18h08.

Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone