Comment superposer deux images GIF [Résolu]

billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 24 févr. 2005 à 19:06 - Dernière réponse : MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention
- 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 

5 réponses

Répondre au sujet
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 25 févr. 2005 à 12:38
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de MorpionMx
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 24 févr. 2005 à 19:28
0
Utile
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
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 25 févr. 2005 à 10:32
0
Utile
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
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 28 févr. 2005 à 17:44
0
Utile
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
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 28 févr. 2005 à 17:59
0
Utile
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.