[GDI+] Image et Frames : comment ça marche ?

Image et Frames : comment ça marche ? [GDI+] - C#/.NET managed - Programmation

Marsh Posté le 31-01-2006 à 19:10:08    

Salut,
 
Question bête :
En C#, l'objet "Image" contient une collection "Frames".
 
Ca sert à quoi au juste ? A lire les "frames" d'un GIF animé ? Ou lire par morceaux une image (comme c'est stocké dans une animation "fli" par exemple.
 
Par exemple, j'ai cette image (certains auront reconnu les graphismes de Civilization II ;))
http://magicbuzz.multimania.com/files/TERRAIN1.GIF
(ce jeu est passé sous domaine public, je pense donc que ça ne pose pas de problème de diffuser certains fichiers le constituant)
 
Est-ce que "Frames" peut m'aider à récupérer chaque sous-image constituant ce gros GIF ? Ou si je suis obligé de prendre l'image, puis faire un bon gros Crop() de grand-mère dessus ?
(a noter que je sopçonne d'être obligé de faire ça de toute façon, puisque certains fichiers GIF ont des "Frames" de tailles différentes, ou comme ici, des offsets inégaux).
 
Question subsidiaire : dans cette image, la transparence est... comment dire... on a fait mieu [:atari]  
 
J'ai cherché je ne sais combien de temps dans tous les sens... J'ai beau mettre une couleur dans "TransparentColor", c'est jamais transparent !

Message cité 1 fois
Message édité par Arjuna le 31-01-2006 à 19:15:29
Reply

Marsh Posté le 31-01-2006 à 19:10:08   

Reply

Marsh Posté le 31-01-2006 à 19:43:19    

Pour la transparence, j'ai fini par réussi (chais pas pourquoi ça marhait pas...)
 
Si y'a moyen de faire plus propre que de passer par un objet Bitmap temporaire... (sâchant par contre que je doit de toute façon recopier mon image en mémoire après le chargement, afin de shooter le handle sur le fichier)
 

Code :
  1. Bitmap tmp = (Bitmap)Image.FromFile("pictures/units/test.GIF", true);
  2.             tmp.MakeTransparent(Color.White);
  3.             tmp.MakeTransparent(Color.Black);
  4.             this.image = (Image)tmp;


Message édité par Arjuna le 31-01-2006 à 19:44:49
Reply

Marsh Posté le 31-01-2006 à 21:12:40    

Bon, ben vu que ça répond à fond à mes questions... Je suis passé du future hipothétique mode isométrie avec "des jolis graphismes que c'est pas moi qui les ai fait" à une vue traditionnelle (pensez aux années 80 :D) avec "des graphiques tout moches que c'est moi qui les ai fait"
 
QQ1 peut me dire ce qui ne va pas dans mon code ?
Pour moi y'a tout qui va, mais vu que j'ai jamais fait ce genre de programme, je suis sûr que tout est à améliorer (comment ça la lisibilité ?)
 
http://magicbuzz.multimania.com/files/MagicCiv.zip (55 Ko)
 
A la base, normalement y'a un "monde" de 4x4 qui se charge avec deux types de terrains différentes
et sur la case en haut à gauche deux "unités" (un 1 et un 2) et on peut bouger l'unité 1 au clavier (flèches)
 
pour ze reste, tout est encore à faire :)
 
y'a juste un truc qui me turlupine : j'ai l'impression que malgré mes "super optimisations de la mort qui tue" dans le "OnPaint", il redessine tout, chais pas pourquoi...
-- Edit : A nan, après tests, ça redessine que ce qu'il faut (en fait, ça redessinait même pas tout ce qu'il fallait quand on redimensionnait ;))
 
Vous noterez que je me suis amusé à me baser sur des fichiers XML pour la plupart des paramètres (faut que j'en mette encore, genre la taille des images), comme ça on peut changer les "données de test" comme on veux ;)


Message édité par Arjuna le 31-01-2006 à 21:34:06
Reply

Marsh Posté le 01-02-2006 à 11:49:01    

Citation :

(ce jeu est passé sous domaine public, je pense donc que ça ne pose pas de problème de diffuser certains fichiers le constituant)


 
 :non: Le jeux n'est pas passé sous le domaine public...A la rigueur tout ce qui est brevé tournant autour du jeux oui mais il faudra quelques dizaines d'années pour que ca passe sous le domaine public ( à moin que sid meier le font eux mêmes ).
 
Par contre je regarderais un peu ton code plus tard, je n'ai jamais touché au GDI+ ca serait intéressant de voir :o  ( surtout que j'adorre C2 :o )

Reply

Marsh Posté le 01-02-2006 à 14:27:23    

Arjuna a écrit :

Est-ce que "Frames" peut m'aider à récupérer chaque sous-image constituant ce gros GIF ? Ou si je suis obligé de prendre l'image, puis faire un bon gros Crop() de grand-mère dessus ?
(a noter que je sopçonne d'être obligé de faire ça de toute façon, puisque certains fichiers GIF ont des "Frames" de tailles différentes, ou comme ici, des offsets inégaux).

Tu supposes bien :)

Arjuna a écrit :

Question subsidiaire : dans cette image, la transparence est... comment dire... on a fait mieux J'ai cherché je ne sais combien de temps dans tous les sens... J'ai beau mettre une couleur dans "TransparentColor", c'est jamais transparent

Si tu charges tes bouts d'image dans tes objets Bitmap, il te suffit d'utiliser la méthode MakeTransparent et de lui passer le code argb de ce magnifique rose fluo.
 
Pour ton second post, j'ai pas le tps de regarder ton code, mais je pense que mon post précédent sur le Double Buffering devrait t'aiguiller.
http://forum.hardware.fr/hardwaref [...] 4009-1.htm


Message édité par _Mose_ le 01-02-2006 à 14:28:11

---------------
Tout est normal, suffit de comprendre pourquoi.
Reply

Marsh Posté le 01-02-2006 à 15:17:53    

j'attends tes explications sur le double buffering :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed