Problème avec Image.Save : EncodeParameter(Encoder.ColorLength, ?)
kyfranBibax
Messages postés26Date d'inscriptionmercredi 11 mai 2005StatutMembreDernière intervention 6 janvier 2008
-
25 mai 2005 à 17:11
kyfranBibax
Messages postés26Date d'inscriptionmercredi 11 mai 2005StatutMembreDernière intervention 6 janvier 2008
-
26 mai 2005 à 09:57
Coucou,
J'ai un problème lorsque je veu sauver mon image en réduisant le nombre de couleur.
Je pense que mon mauvais paramètre est EncoderParameters mais je ne trouve pas comment y remedier.
Voici mon bout de code concerné :
myImageCodecInfo = GetEncoderInfo("image/tiff");
// EncoderParameter object in the array.
myEncoderParameters = new EncoderParameters(1);
// Save the image with a color depth of 7 bits per
pixel (128 colors).
myEncoderParameters.Param[0] = new
EncoderParameter(Encoder.ColorDepth, 7);
at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
at displayRaster.displayRaster.ChangeRasterFormat() in
c:\documents and settings\franck\mes documents\visual studio
projects\displayraster\displayraster.cs:line 176
Lorsque je reprend "l'exemple" (j'en ai trouvé qu'un!) et que je modifie la ligne :
myEncoderParameters.Param[0] = new EncoderParameter(Encoder.ColorDepth,
24L);
Tous mes fichiers passent sauf les fichiers .tif et j'obtiens une autre sorte d'exception :
System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
at displayRaster.displayRaster.ChangeRasterFormat() in
c:\documents and settings\franck\mes documents\visual studio
projects\displayraster\displayraster.cs:line 176
Alors, j'ai quelques petites questions :
Est-ce que quelqu'un pourrait m'expliquer le fonctionnement de la variable en rouge car je comprrend pas trop le 24L?
Pour passer en 128 couleurs, il faut bien 7bpp (2^7 = 128)?
kyfranBibax
Messages postés26Date d'inscriptionmercredi 11 mai 2005StatutMembreDernière intervention 6 janvier 2008 26 mai 2005 à 09:57
Coucou,
J'ai du nouveau...
Après maints efforts de google et de msdn, j'en suis arrivé aux résultats suivant :
1) Le paramètre 24L correspond bien au nombre de couleur, dans ce cas : 16.7+ millions couleurs.
2) Pour avoir une image en 128 couleurs, il faut que je la sauve en 7 bpp.
Voici les queques limitations que j'ai trouvé :
1) Selon la msdn ( cliquez ici),
il y a une liste de valeurs (4,8,16,24,32); Mais je ne sais pas si
cette liste est exhaustive; Je pense que ce sont les seules valeurs
possibles car dès que je sors de ces paramètres, j'ai l'exception
suivante :
System.ArgumentException: Invalid parameter used.
2) On ne peut copier une image sur le même flux d'entrée (c-a-d même nom de fichier en entrée et en sortie);
3) Et le fin du fin, le plantafin : Même avec les valeurs données dans la msdn, je garde l'exception :
System.Runtime.InteropServices.ExternalException: A generic error
occurred in GDI+.
Et j'aimerais bien trouvé pourquoi celle-ci apparaît.
Des questions restent donc en suspens :
1) Puis coder mon image en 7bpp avec Image.Save?
=> je n'y crois plus et il faudrai que trouve une autre manière.
2) ¨Pourquoi l'exception du 3) apparaît toujours?
Si vous avez des commentaires ou des précisions à faire sur ce sujet, n'hésitez pas, car là je commence vraiment à craquer.
Si une petite idée vous vient à l'esprit, je suis prêt à prendre tout ce qui passe.