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# Discussion :

Pocket Pc - NotSupportedException sur une PictureBox


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut Pocket Pc - NotSupportedException sur une PictureBox
    Bonjour.

    Je développe une application sur Pocket Pc.

    Sur mon design j'ai ajouté une pictureBox pour mettre une image. Au début j'avais pas de souci pour lancer mon application, et d'un coup, je sais pas pourquoi, la pictureBox fait planter l'application, alors que je n'ai pas retouché à la pictureBox...

    Je reçois l'exception
    NotSupportedException System.Drawing.Bitmap
    Mon image est à l'origine en png, j'ai essayé de la mettre en bmp, mais ça change rien.


    Je pense pas que ce soit très utile mais on sait jamais, je met le code du designer pour la pictureBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    this.pictureBox.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox.Image")));
    this.pictureBox.Location = new System.Drawing.Point(43, 186);
    this.pictureBox.Name = "pictureBox";
    this.pictureBox.Size = new System.Drawing.Size(165, 60);
    this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
    Le plus surprenant c'est que ça fonctionnait bien au début...

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Je n'ai toujours pas trouvé pourquoi subitement la pictureBox à cessé de fonctionné correctement. Et il me semble pourtant ne rien avoir touché.
    En tout cas si vous avez une aide, une idée ou une question de précision à me poser, n'hésitez pas. Je développe pour une entreprise et j'aimerais bien aboutir à quelque chose sans rester planter trop longtemps sur des choses bêtes comme ça...

  3. #3
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Bonjour,

    Plutôt que nous montrer le designer, pourrais tu poster les lignes de codes où cela plante (là où est levée l'exception...), parce que bon la PictureBox supporte très bien les png.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Bonjour, merci

    Ben c'est justement là que ça plante, sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.pictureBox.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox.Image")));
    Et c'est bien la le problème, ça devrait fonctionné. Et même pire, ça fonctionnait au début. Pour ça que je ne comprend pas pourquoi...

  5. #5
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Ah ok, autant pour moi...

    Ta ressource existe bien ? Essayes de mettre un point d'arrêt pour voir ce que vaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resources.GetObject("pictureBox.Image")

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Pas de souci ^^

    Ben, je sais pas trop ce que tu veux. Dans ressource j'ai
    {System.ComponentModel.ComponentResourceManager}
    Après je peux détaillé mais c'est le bordel là-dedans Et je trouve rien de bien pertinent.

  7. #7
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Ba il faut savoir si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resources.GetObject("pictureBox.Image")
    vaut quelque chose ou Null.

    Si c'est Null, essayes de supprimer l'image de la pictureBox à partir du designer et de l'ajouter directement dans ton code.

    Sinon, donne moi le type

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Ben ça me mettait ce que j'ai écrit au dessus.

    Et maintenant je suis passé par les ressources pour mettre mon image, c'est plus propre. Donc j'ai le code suivant dans le Ressources.Designer.cs:

    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
    [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
            internal static global::System.Globalization.CultureInfo Culture {
                get {
                    return resourceCulture;
                }
                set {
                    resourceCulture = value;
                }
            }
     
            internal static System.Drawing.Bitmap img {
                get {
                    object obj = ResourceManager.GetObject("img", resourceCulture);
                    return ((System.Drawing.Bitmap)(obj));
                }
            }
    J'ai la même erreur me disant:
    NotSupportedException System.Drawing.Bitmap
    Et ressourceCulture est null cette fois-ci


    Et dans le designer de mon appli j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.pictureBox.Image = Properties.Resources.img;

  9. #9
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    C'est où ce code ? Dans le designer ?

    Bref, si tu veux créer ton image à partir de tes ressources, tu peux faire comme cela (dans le load par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ress As System.Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly()
    Dim my_namespace As String = ress.GetName().Name.ToString()
     
    Dim sa As String() = ress.GetManifestResourceNames()
     
    Dim s As IO.Stream = ress.GetManifestResourceStream(my_namespace & "tonImage.extension")
    PictureBox1.Image = New Bitmap(s)
    Le code est en vb, mais tu peux convertir facilement

    Pour que cela fonctionne, il faut déclarer ton image comme Ressource Incorporée

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Alors, j'ai pas tout compris mais bon, j'ai essayé de retranscrire ton code en C# et de le mettre dans le designer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    this.pictureBox.Location = new System.Drawing.Point(43, 186);
                this.pictureBox.Name = "pictureBox";
                this.pictureBox.Size = new System.Drawing.Size(165, 60);
                System.Reflection.Assembly ress = System.Reflection.Assembly.GetExecutingAssembly();
                string my_namespace = ress.GetName().Name.ToString();
                string[] sa = ress.GetManifestResourceNames();
                System.IO.Stream s = ress.GetManifestResourceStream(my_namespace + "img.png");
                this.pictureBox.Image = new System.Drawing.Bitmap(s);
                this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
    Mais j'ai un nullReferenceException parce que j'ai null dans s

    Et j'ai aussi mon design qui ne s'affiche plus

  11. #11
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    En gros, ce code récupère l'instance de ton application, va chercher ses ressources et lit le stream de la ressource voulue.

    Tu as bien passé ta ressource en Embedded Resource ? (propriété Build Action).

    En plus, pardon, je t'ai file un code avec des tests au milieu et un peu foireux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ress As Assembly = [Assembly].GetExecutingAssembly() //Récupération de ton instance d'application
    Dim my_namespace As String = ress.GetName().Name.ToString() //Récupération du namespace
     
    Dim stream As IO.Stream = ress.GetManifestResourceStream(my_namespace & "." & nomDeTaRessource & ".tonExtension") //Récupération du flux de ta ressource
    If Not IsNothing(stream) Then 
                PictureBox1.Image = New Bitmap(stream)
    End If
    Si c'est toujours vide, tu peux vérifier tes ressources en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string[] sa = ress.GetManifestResourceNames();
    Cela va te donner la liste des ressources disponibles...si elle n'est pas dans la liste, c'est qu'elle n'est pas embarquée dans ton application et qu'il faut modifier sa propriété build action.

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    Je me disais aussi que y'avait des lignes qui servait à rien là dedans.

    Mais je dois le mettre où se code en faite ? Parce que dans le designer je me suis fait jeter par le compilateur par un joli avertissement me disant que j'avais pas le droit d'y mettre là (donc ça pouvait pas marcher). Et j'ai essayer de le mettre dans mon appli, juste après InitializeComponent() mais ça m'a lancé l'appli sans l'image (j'en déduis que le stream est null)

    PS: je précise que j'ai mis le nom de mon image en dur, tout d'un bloc dans la chaine de caractère pour éviter qu'une erreur vienne de là parce qu'au test précédent j'ai eu un problème pour récupérer ma ressource, enfin bref, là au moins je suis sur.


    Mais quel casse tête...

  13. #13
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Si le stream est null, essayes de regarder avec la dernière ligne de code que j'ai posté, ça te donnera le nom (et le chemin) exacte de tes ressources...

  14. #14
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 151
    Points : 87
    Points
    87
    Par défaut
    C'est ce que j'étais en train de voir justement

    Yes ! Ca marche !!!

    J'ai trouvé d'où venait le souci: Il manquait ".Resources" avant le nom de l'image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    System.Reflection.Assembly ress = System.Reflection.Assembly.GetExecutingAssembly();
                string my_namespace = ress.GetName().Name.ToString(); 
                System.IO.Stream stream = ress.GetManifestResourceStream(my_namespace + ".Resources.MonImage.png"); 
                if (stream != null)
                {
                    this.pictureBox.Image = new System.Drawing.Bitmap(stream);
                    this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
                }
    J'ai aussi rajouté une ligne pour mettre l'image à la bonne taille dans ma pictureBox.

    J'y croyais plus
    Merci beaucoup !

  15. #15
    Membre éprouvé
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Points : 1 111
    Points
    1 111
    Par défaut
    Je t'en prie

    N'oublie pas de passer le post en Résolu

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/06/2010, 11h40
  2. Zoom et Scroll sur une PictureBox avec BackgroundImage
    Par Khoral dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/10/2009, 15h18
  3. Problème de coordonnées sur une PictureBox
    Par Souleyre dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 09/10/2009, 22h10
  4. Drag and drop sur une PictureBox
    Par abdiouldbody dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/06/2009, 15h55
  5. [c#] Scrollbar sur une pictureBox
    Par Ecco59 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 13/07/2006, 16h30

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