Problème avec Image.Save : EncodeParameter(Encoder.ColorLength, ?)

kyfranBibax Messages postés 26 Date d'inscription mercredi 11 mai 2005 Statut Membre Dernière intervention 6 janvier 2008 - 25 mai 2005 à 17:11
kyfranBibax Messages postés 26 Date d'inscription mercredi 11 mai 2005 Statut Membre Derniè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);



picChart.Image.Save(rasterFileNameTif,myImageCodecInfo,myEncoderParameters);



A chaque fois, une exception apparaît :

System.ArgumentException: Invalid parameter used.

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)?



Merci pour vos réponses..


Have a nice day



Bibax en fait un max

1 réponse

kyfranBibax Messages postés 26 Date d'inscription mercredi 11 mai 2005 Statut Membre Derniè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.


Have a nice day



Bibax en fait un max
0
Rejoignez-nous