[C#] Compression d'image

Signaler
Messages postés
81
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
7 février 2007
-
Messages postés
81
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
7 février 2007
-
Bonjour à tous,



Dans mon projet, je dois faire des acquisitions d'image, tout fonctionne nickel,

l'acquisition de mon image se passe bien et mon picture box se remplit avec l'image.

Maitenant je veux la sauvegarder, j'utilise ce code :



SaveFileDialog sd = new SaveFileDialog();

sd.Title = "Save Image As...";


sd.InitialDirectory =
ConfigurationSettings.AppSettings["dossier_photo"];
//Récupération du chemin du dossier photo

sd.FileName = TBIDClient.Text+".jpg";


sd.Filter = "Jpeg file (*.jpg |
*.jpg"; // jpg JPEG file format



if( sd.ShowDialog() != DialogResult.OK )

return;



pictureBox.Image.Save( sd.FileName );



mon image se sauvegarde bien,... cependant je me pose une question,



Il y a t'il moyen de gérer la compression du fichier jpeg ainsi créé ? et si oui comment ?



MErci pour votre aide,


Bibicool

7 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Dans le code qui suit, le controle "compression" est une trackbar




Encoder enc = Encoder.Compression;


EncoderParameter ep = new
EncoderParameter(enc, (long)(compression.Value));


EncoderParameters eps = new
EncoderParameters(1);

eps.Param[0] = ep;


ImageCodecInfo ici =
GetEncoderInfo("image/jpeg");



pictureBox.Image.Save(saveFile.FileName, ici, eps);



a++

Mx
Messages postés
81
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
7 février 2007
1
Super, merci

Bibicool
Messages postés
81
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
7 février 2007
1
Heu désolé MorpionMX, ou quelqu'un d'autre d'ailleurs



J'ai donc ajouté ce code... en créant la méthode GetEncoderInfo trouvé sur MSDN



private static ImageCodecInfo GetEncoderInfo(String mimeType)

{

int j;

ImageCodecInfo[] encoders;

encoders = ImageCodecInfo.GetImageEncoders();

for(j = 0; j < encoders.Length; ++j)

{

if(encoders[j].MimeType == mimeType)

return encoders[j];

}

return null;

}



Tout compile, c'est nickel.



Sauf bien sûr... si je n'utilise pas de trackbar, quel paramètre passer à la place du (long)Compression.value.



J'ai essayé 1, 100... mais ca changer rien à la définition de mon image.

J'ai cherché dans MSDN, mais bon rien n'y fait, on me parle de 32 bit.. mais j'ai jamais trop capté tout cela.

Quelqu'un pourrait me traduire et me donner la valuer minimal et maximal que je peux mettre pour faire varier ma compression ?



Un super grand merci

Bibicool
Messages postés
81
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
7 février 2007
1
Ha oui encore quelques détails,



J'ai donc essayé avec la trackbar.. valeur de 0 à 10...

Que je prenne 0 ou 10 mes photos sont les mêmes.



Je prends mes photos avec ma webcam, le poid d'une photo prise sans mon programme : 286ko en jpeg (352*288)

le poid des photo prise par mon programme : 10ko en jpeg(352*288)



Quelqu'un a une idée de la façon d'augmenter la qualité... merci


Bibicool
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
A la place du (long) Compression.Value, tu peux mettre n'importe quelle valeur de type long.

Pour info, ma trackbar avait ces propriétés :



compression.Maximum = 100;

compression.Value = 100;



Je vais voir si je peux pas mettre une source allégée de mon prog, avec cette partie. Je vais m'y atteler maintenant



Au fait, désolé de ne pas avoir mis la fonction GetEncoderInfo(), J'ai complétement oublié.



Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
http://www.csharpfr.com/code.aspx?ID=28814



Voila, si ca peut t'aider
Messages postés
81
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
7 février 2007
1
Merci,



Je vais vérifier si ca fonctionne mieux et vous tiens au courant.

Pas de prob pour le GetEncoderInfo()... j'ai trouvé facilemetn,


Bibicool