cs_SpongeBobSquarePants
Messages postés3Date d'inscriptionvendredi 11 septembre 2009StatutMembreDernière intervention23 juin 2010
-
17 juin 2010 à 16:21
cs_SpongeBobSquarePants
Messages postés3Date d'inscriptionvendredi 11 septembre 2009StatutMembreDernière intervention23 juin 2010
-
23 juin 2010 à 09:34
Bonjour,
Je rencontre actuellement une erreur d'exécution dont je n'arrive pas à trouver la cause.
Petit résumé :
J'ai écrit un bout de code permettant de redimensionner une image en la passant à 200 dpi.
Lors de l'exécution du programme, j'ai l'erreur "Une erreur générique s'est produite dans GDI+", lors de l'instruction "save".
Comme conseillé sur de nombreux forums, je fais un save sur une copie de l'image source et l'image source est auparavant fermée afin d'éviter tout conflit. Cependant l'erreur est toujours là.
Algorithme général :
- Ouverture de l'image source
- Copie de l'image source dans une image redimensionnée
- Fermeture de l'image source
- Sauvegarde de la copie => ERREUR
Voici le code :
String inFilePath = @"D:\inFile.tif";
String outFilePath = @"D:\outFile.tif";
// Ouverture de l'image à redimensionner
FileInfo inFile = new FileInfo(inFilePath);
// Stockage de l'image dans un flux
byte[] readByteInFile = new byte[inFile.Length];
(inFile.OpenRead()).Read(readByteInFile, 0, Convert.ToInt32(inFile.Length));
Stream tmpStream = new MemoryStream(readByteInFile, 0, eadByteInFile.Length);
Image img = Bitmap.FromStream(tmpStream);
//*** Redimensionnement de l'image
Bitmap bitmap;
int w, h;
int destinationDpi = 200;
w = Int32.Parse((img.Width * (destinationDpi / Convert.ToInt32(img.HorizontalResolution))).ToString());
w =Convert.ToInt32 (img.Width * (destinationDpi / img.HorizontalResolution ));
h = Convert.ToInt32 (img.Height * (destinationDpi / img.VerticalResolution ));
bitmap = new Bitmap(w,h);
bitmap.SetResolution(destinationDpi,destinationDpi);
Graphics g = Graphics.FromImage((Image)bitmap);
g.DrawImage(img, 0, 0, w, h);
img.Dispose();
img = null;
//*** Fin redimensionnement de l'image
// Définition du format de l'image en TIFF
ImageCodecInfo tiffCodecInfo = GetEncoderInfo("image/tiff");
EncoderParameters myEncoderParameters = new EncoderParameters(2);
// Compression de l'image en CCITT group4
myEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
// Encodage de l'image en bitonal
myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 1L);
// sauvegarde de l'image
bitmap.Save(outFilePath, tiffCodecInfo, myEncoderParameters); // <= L'ERREUR ARRIVE ICI
tmpStream.Close();
g.Dispose();
bitmap.Dispose();
cs_rodcobalt22
Messages postés193Date d'inscriptiondimanche 10 février 2002StatutMembreDernière intervention16 février 2016 18 juin 2010 à 08:03
Je n'ai pas pas le temps de lire profondément ton code toute de suite.
Mais si utilisé plutôt la méthode getthumb, plutôt que de modifié la résolution de ton image.
Ce n'est qu'une simple suggetion.
En espérant te donner une "bonne" piste
RodCobalt22, vous salue bien
Pensez au TAG résolu ! Ainsi les réponses seront plus facile à trouver et les serial Helper iront plus vite
PS : Pardonnez mes fautes d'orthographe (All
cs_SpongeBobSquarePants
Messages postés3Date d'inscriptionvendredi 11 septembre 2009StatutMembreDernière intervention23 juin 2010 18 juin 2010 à 10:17
Merci pour ta réponse.
En fait quand je parle de redimensionnement, c'est en terme de pixel, pas de taille. Je passe mon image de 300 à 200 dpi, tout en conservant la hauteur et la largeur d'origine.
Donc la fonction GetThumbnailImage ne conviendra pas ici.
cs_SpongeBobSquarePants
Messages postés3Date d'inscriptionvendredi 11 septembre 2009StatutMembreDernière intervention23 juin 2010 23 juin 2010 à 09:34
Désolé pour la réponse un peu tardive.
J'ai testé le code que tu m'a envoyé, et j'ai le même souci : lors du save effectué sur l'image retournée par la fonction, j'ai l'erreur "Une erreur générique s'est produite dans GDI+".
Il semble que cette erreur arrive dès que j'utilise un bitmap pour modifier mon image d'origine, et que je l'encode en CCITT 4 lors du save.
J'utilise peut-être mal la fonction d'encodage, je vais chercher dans cette direction.