Comment superposer deux images GIF

Résolu
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 - 24 févr. 2005 à 19:06
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre 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

5 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
25 févr. 2005 à 12:38
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
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
24 févr. 2005 à 19:28
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
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
25 févr. 2005 à 10:32
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
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
28 févr. 2005 à 17:44
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
28 févr. 2005 à 17:59
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
0
Rejoignez-nous