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

C++/CLI Discussion :

Levée Exception sur conversion de tableau de byte en Image


Sujet :

C++/CLI

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut Levée Exception sur conversion de tableau de byte en Image
    Bonjour,

    Je souhaite afficher une petite partie d'une image complète dans une pictureBox. Pour cela, une fois le rectangle de sélection de la partie à afficher défini, je converti l'image principale en tableau de byte (à partir de la méthode donnée dans le faq) puis je recopie les pixels qui m’intéressent dans un autre tableau de byte. Jusque là aucun problème.

    Cependant, lorsque je souhaite convertir le tableau résultant en Image, en passant par la méthode décrite dans le faq:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	cli::array <unsigned char> ^ImageRoi = gcnew cli::array <unsigned char> (RoiWidth * RoiHeight);
    		MemoryStream ^ms = gcnew MemoryStream(ImageRoi);
    		Image ^test =  Image::FromStream(ms);
    		ms->Close();
    j'ai une exception de type System Argument Exception dans System.Drawing.dll au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image ^test =  Image::FromStream(ms);
    Il me semble que je fourni le bon paramètre au constructeur de MemoryStream, ce flux devrait donc être correct pour le constructeur de l'image.

    Quelqu'un aurait-il une idée de lce qui peut lever cette exception?

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,

    Ne peux-tu pas tout simplement utiliser la fonction Bitmap::Clone ( méthode (Rectangle, PixelFormat) ) pour créer un nouveau bitmap qui ne contient que la partie ( ici définie par le rectangle ) de l'image à afficher, puis l'envoyer dans ta pictureBox?
    Ca parait plus simple que d'utiliser la structure Image

    Ca dois donner ( à tester ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Rectangle r ( p1x, p1y, p2x, p2y );//Avec p1 et p2 les coordonnées de la zone à afficher
    Bitmap^ imageZoom = MonBitmap->Clone ( r, MonBitmap->PixelFormat );
     
    maPictureBox->Image = imageZoom;
    Ca ne fait que contourner le problème, mais ça dois marcher... Pour ton exception, je ne vois pas...

  3. #3
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Pour ton exception, ça, ça marche bien mieux à mon avis :

    à la ligne 4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image ^test = gcnew Bitmap( ms );
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image ^test =  Image::FromStream(ms);
    Regarde ici pour l'utilisation correcte du constructeur de Bitmap avec un stream.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Merci,
    j'ai essayé ce que vous m'avez conseillé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image ^test = gcnew Bitmap( ms );
    Malheureusement, le MemoryStream que je passe en paramètre n'est pas considéré comme un argument valide par le constructeur. Le problème est donc quand même là. Pourtant, en vérifiant les propriété de l'objet "ms" dans le debug, je ne vois rien d'anormale.

  5. #5
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Donne l'adresse précise du FAQ d’où tu sors ce code, que je puisse y regarder pour comprendre d’où vient ce problème.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 13
    Points : 5
    Points
    5

Discussions similaires

  1. Conversion de tableau de byte en types primitifs
    Par soft0613 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 14/03/2008, 15h14
  2. [C# 2.0] Conversion hexadécimale dans un tableau de byte[]
    Par cyllix dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/08/2006, 12h29
  3. Réponses: 1
    Dernier message: 09/07/2006, 23h39
  4. [C#] Convertir un tableau de byte en Image
    Par goulhasch dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/01/2005, 10h12

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