IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Aide : Comment contrôler la validité d'une image ?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut [C#] Aide : Comment contrôler la validité d'une image ?
    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.

    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");
        }
    }
    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.

    Merci d'avance pour votre aide et à bientôt.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 115
    Par défaut
    je ne connait pas très bien ce que tu fais mais je pense qu'au lieu de gérer un ArgumentException, c'est plutôt un InvalidArgumentException. En tout cas, ça vaut la peine d'essayer ...

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut
    Effectivement, ça ne coute rien d'essayer.
    Je vais voir ça dès demain et je te dis si c'est bon.

    Merci pour ton aide

  4. #4
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 13
    Par défaut
    Apparemment, InvalidArgumentException n'est utilisée qu'avec SQL.

    Pour info, voici un extrait de l'aide (celle online est exactement la même que celle offline ) :

    Syntaxe C#

    public static Image FromStream (
    Stream stream,
    bool useEmbeddedColorManagement,
    bool validateImageData
    )

    Paramètres :

    stream : Stream qui contient les données pour ce Image.

    useEmbeddedColorManagement : true pour utiliser les informations de gestion de couleurs incorporées dans le flux de données ; sinon, false.

    validateImageData : true pour valider les données de l'image ; sinon false.

    Valeur de retour : Image créé par cette méthode.

    Exceptions :

    Type d'exception : ArgumentException
    Condition : Le format d'image du flux n'est pas valide.
    Je n'ai toujours pas de solution et mes recherches restent sans résultat (même sur des sites anglais).

    A vot' bon coeur m'sieurs, dames

  5. #5
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    tu dois avoir une exception qui est levée ailleurs..

    Evite d'intercepter "Exception" dans le bolc catch...

    en exécutant une ou des mthodes, regarde les exceptions précises qu'elles peuvent lever (et si elles en lèvent) et intercepte les...

  6. #6
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Bizarre... parce que c'est bien une exception de type "ArgumentException" qui est levée.

    Voir l'aide de MSDN: http://msdn2.microsoft.com/fr-fr/lib...4x(VS.80).aspx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Comment tester la validité d'une date ?
    Par Zefree dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/12/2012, 15h49
  2. Comment contrôler l'existence d'une image
    Par pierrot10 dans le forum Langage
    Réponses: 6
    Dernier message: 22/11/2011, 11h41
  3. Réponses: 10
    Dernier message: 16/05/2008, 19h29
  4. [Dates] comment vérifier la validité d'une date en php
    Par cortex024 dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2007, 09h46
  5. Comment tester la validité d'une adresse mail
    Par jmoez dans le forum Oracle
    Réponses: 1
    Dernier message: 19/04/2006, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo