Bonjour à tous,
Je suis developpeur mais je débute en C#.
Je suis en train de developper une application dans laquelle je dois charger des images de grande taille (certaines font plus de 60 Mo).
Ces images peuvent comporter des erreurs et l'appli a pour objet de contrôler ces images.
Afin de m'assurer que l'image a le bon format (entête jpeg bien formaté par exemple), j'ai utilisé un flux (FileStream).
Quand je charge mon image, je la charge à travers ce flux en en demandant la validation par la méthode Image.FromStream(nomFlux, false, true).
D'après ce que j'ai cru comprendre à partir de l'aide dans VS 2005, la méthode citée doit lever une exception de type ArgumentException, si le format de l'image n'est pas bon.
Or, avec le code ci-dessous et un "try...catch", je n'arrive pas à éviter le plantage de mon appli lors de la levée d'exception, comme si le "catch" ne gérait rien![]()
Je précise que ce n'est qu'un morceau de code de mon appli et qu'elle affiche aussi des infos concernant l'image.
Les images disponibles sont listées dans une ListView (nommée LV_listeImagettes). L'image est chargée dans une PictureBox lorsqu'on clique sur un élément de la ListView.
Je suis prêt à explorer n'importe quelle autre possibilité pour contrôler ce format car mes recherches sur le net ne m'ont pas aidées à trouver une solution pour le contrôle du flux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 // Initialisation des variables FileStream canalFichier = null; Image img = null; Image imgVignette = null; try { //Ouverture d'un canal pour ouvrir un fichier en lecture seule canalFichier = File.OpenRead(LV_listeImagettes.SelectedItems[0].Text); //Chargement de l'image a partir de ce canal img = Image.FromStream(canalFichier, false, true); PICBX_imageCourante.Image = img; //Recuperation et affichage des attributs de l'image TXTBX_hauteurImage.Text = img.PhysicalDimension.Height.ToString(); TXTBX_largeurImage.Text = img.PhysicalDimension.Width.ToString(); TXTBX_nbPixelsImage.Text = img.PixelFormat.ToString(); //Liberation des ressources canalFichier.Dispose(); if (img != null) { img = null; } if (imgVignette != null) { imgVignette.Dispose(); } } catch (Exception ex){ if ((ex is ArgumentException) | (ex is OutOfMemoryException)) { canalFichier.Dispose(); img.Dispose(); MessageBox.Show("Image non valide"); } }
Merci d'avance pour votre aide et à bientôt.
Partager