Comment superposer deux images GIF [Résolu]

Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- - Dernière réponse : MorpionMx
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
- 28 févr. 2005 à 17:59
Voila, une petite question de graphisme moi qui n'y connait rien.



J'ai deux images GIF de
formats différents. Et je voudrais mettre une image (plus petite que
l'autre) par dessus la première centrer en plein milieu de la première.
Il faut savoir que sur cette petite image, la couleur blanche sera
transparente. Ainsi j'obtiendrais une image GIF.



Ceci devra me permettre de placer un curseur en plein milieu de l'image
(un peu a la counter LOL, sauf que je suis pas sur HL3, dsl).



Bonne soirée a tous

Billou_13
Bask En Force
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
3
Merci
Ok, dans ce cas en mode console, tu pourras pas overrider la méthode OnPaint.

Je te propose une autre solution qui marchera en mode console:



Dans une méthode (appelée ici Juxtapose) tu met :



public void Juxtapose()

{

// Création
d'un bitmap temporaire a la taille du premier gif (supposé etre plus
grand que le second)

Bitmap temp = new Bitmap(premierGif.Width, premierGif.Height);

//On récupere l'objet Graphics de l'image temporaire

Graphics g = Graphics.FromImage(temp);

// On dessine
la premiere image sur l'image temporaire (avec son objet Graphics)

g.DrawImage(premierGif, 0, 0);

// Idem avec la seconde image, mais celle ci est centrée

g.DrawImage(secondGif, (premierGif.Width / 2) - (secondGif.Width / 2),


(premierGif.Height / 2) - (secondGif.Height /
2),

secondGif.Width, secondGif.Height);

// On libere les ressources

g.Dispose();

//Et on fini par sauver l'image temporaire, au format gif

temp.Save("temp2.gif", System.Drawing.Imaging.ImageFormat.Gif);

}



et roule



Mx

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de MorpionMx
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
0
Merci
Override la méthode OnPaint du controle sur lequel tu veux afficher tes images.

Et dans cette méthode, tu fais un DrawImage() de la premiere, puis de la deuxieme.

Par contre je sais pas si je résoud ton probleme.



petit exemple pour t'aider peut-etre.



protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint(e); // A conserver ou non

Graphics g = e.Graphics

g.DrawImage(premierGif, 0, 0, premierGif.Width, premierGid.Height);

g.DrawImage(secondGif, (premierGif.Width / 2) - (seconGif.Width / 2),


(premierGif.Height / 2) -
(secondGif.Height / 2),


secondGif.Width,
secondGif.Height);

}



Normalement la transparence sera gérée.
Mx
Commenter la réponse de MorpionMx
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
16
0
Merci
oki merci je vais voir ça. Mais la petite exception à la règle est
que je suis en mode console. Donc pour moi, l'image ne sera que
sauvegarder sur le disque. En fait pour l'instant, j'arrive à récupérer
une image et à la sauvegarder en GIF sur le disque dur. Donc il me
manque plus qu'a superposer mon image par dessus et à sauvegarder
l'image sur le disque. Voila, je vais donc tester ça mais si tu as une
idée, je suis pour ( lol )



Je pense que pour avoir l'objet image, il faut que je rajoute la
bilbiothèque image et ainsi j'aurai accès aux méthodes OnDraw et
DrawImage (enfin j'espère ...)



En tout cas, merci à toi, bonne journée




Billou_13
Bask En Force
Commenter la réponse de billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
16
0
Merci
c'est bon g réussi en implémentant le code suivant (et en me servant de ce que tu m'as donné lol )



Bitmap IMap = new Bitmap(Image.FromFile(ImageMap+ImageNumber.ToString()+".gif"));

Bitmap IMarker = new Bitmap(Image.FromFile(ImageMarker+".gif"));

IMarker.MakeTransparent(Color.White);

Graphics GrMap = Graphics.FromImage(IMap);

int X_Map,Y_Map;

X_Map = (IMap.Width/2)-(IMarker.Width/2);

Y_Map = (IMap.Height/2)-(IMarker.Height/2);

GrMap.DrawImage(IMarker,X_Map,Y_Map);

GrMap.Dispose();

string SaveImage = ImageMarkedMap+ImageNumber.ToString()+".gif";

IMap.Save(SaveImage,System.Drawing.Imaging.ImageFormat.Gif);

IMap.Dispose();

IMarker.Dispose();



Seulement, mon image résultante est beaucoup (beaucoup ) plus grosse
que celle du départ. Et en plus, elle est de moins bonne qualité LOL



Mon image de base fait 11Ko et l'image que je colle par dessus en fait 2Ko. L'image du résultat fait 35Ko.



J'ai du louper un truc au niveau de la compression. Si vous pouvez m'aider ?



Merci et bonne soirée a tous


Billou_13
Bask En Force
Commenter la réponse de billou_13
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Dernière intervention
30 octobre 2008
44
0
Merci
J'ai testé ton code avec un gif de 106 ko et un autre, (avec 80 % de blanc) de 9 Ko

L'image resultante, avec ton code donne 115 Ko



Donc ca a l'air d'aller

Bizarre :/

Mx
Commenter la réponse de MorpionMx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.