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 :

probleme avec les graphiques


Sujet :

C#

  1. #1
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut probleme avec les graphiques
    bonjour !!!
    j'ai un petit problème avec les graphiques en fin j'espère !! donc je charge une image a partir du disque dur, en suite je modifie l'image, je dessine des lignes a l'intérieur en utilisant un graphique g.drawLine...!! et pour enregistrer la nouvelle image (image+ligne) alors j'ai cree une autre image bmp qui va recevoir la ligne et l'image et pour cela j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Graphics g;
    Bitmap bmp= new Bitmap(pictureBox.width, pictureBox.height); // initialisation de bmp
     
    Bitmap img = new Bitmap(openFileDialog1.FileName); // mon image qui se trouve sur le disque 
     
    //pour sauvgarder le tout dans bmp alors j'ai fait
     
    g = Graphics.FromImage(bmp);
     
    g.drawImage(img,0,0);
    g.drawLine(....)
    questions :
    1- comment faire pour que a chaque fois que je clique sur un bouton nouveau le graphique g se vide et bmp aussi.
    2- pour le bitmap j'aimerais qu'il prends la taille de l'image et pas celui de pictureBox j'ai essaye de remplacer pictureBox.width par img.width et la même chose pour le height mais il m'affiche erreur et je pense que c'est logique car je fais l'initialisation avant le chargement de l'image !!!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par ralf91 Voir le message
    1- comment faire pour que a chaque fois que je clique sur un bouton nouveau le graphique g se vide et bmp aussi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.Clear(couleurDeFond);
    2- pour le bitmap j'aimerais qu'il prends la taille de l'image et pas celui de pictureBox j'ai essaye de remplacer pictureBox.width par img.width et la même chose pour le height mais il m'affiche erreur et je pense que c'est logique car je fais l'initialisation avant le chargement de l'image !!!
    La réponse est dans la question... charge d'abord l'image source, et crée ensuite le bitmap de la même taille.

  3. #3
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    salut !!
    est ce l'utilisation des graphiques est une bonne solution pour sauvgarder les lignes sur l'image !! car j'ai entendu quelque part que je peux utiliser l'evenement paint mais je ne sais pas comment faire !!!

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu ne peux rien sauvegarder avec un Graphics... Ca sert simplement à dessiner sur une image, un contrôle, ou, d'une manière générale, un "device context" (qui correspond grosso modo à une surface sur laquelle on peut dessiner)
    Pour sauvegarder, tu dessines sur une image, et tu enregistres l'image.

  5. #5
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    salut !!
    essaye de dessiner des lignes avec g.drawLine sur une image img en suite sauvegarde l'image img et tu verras !!! en fait quand tu dessines des dessine des lignes sur l'image tu ne modifies pas l'image en fait, mais par contre quand je mets g.drawImage en suite g.drawLine alors g contient maintenant une occurrence de l'image et une ligne et après j'ai mis g=graphics.fromImage(bmp) la j'ai mis tout dans une nouvelle image qui va contenir le graphique g donc bmp contient image + ligne et celle la je la sauvegarde voila !!!

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben quand je le fais ça marche bien... donc à mon avis tu fais quelque chose de travers.

    g contient maintenant une occurrence de l'image
    ...
    une nouvelle image qui va contenir le graphique g
    Je ne pense pas que tu aies bien compris le concept de Graphics... Ces 2 phrases ne veulent rien dire ! Un Graphics ne contient pas une image et une image ne contient pas un Graphics...

    Il y a surement une erreur de logique dans ton code. Explique clairement ce que tu cherches à faire, et montre le code que tu as utilisé.

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Ce sont les objets de type GraphicsPath qui peuvent contenir des figures géométriques comme des objets de type Rectangle pas des objets de type Graphics.

  8. #8
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    salut !!
    donc tu as chargé une image a partir du disque dur avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img = new Bitmap(openFileDialog1.FileName);
    en suite t'as dessiner une ligne en utilisant le graphique g:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g.DrawLine(new Pen(Color.Red), new Point(x1, y1), new Point(x2, y2));
    et la fin t'as sauvegarde avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img.Save(sauve.FileName);
    et ca marché (t'as eu une image qui contient img+ligne) !!!! impossible !!!

  9. #9
    Membre du Club Avatar de ralf91
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 419
    Points : 60
    Points
    60
    Par défaut
    moi ca marche très bien avec le graphique g mais si je la fais sauvegarde directement c'est a dire je charge une image en suite je dessine dessus ben il sauvegarde l'image mais sans la modification !!
    voici mon code :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Graphics g;
    Bitmap bmp;
     public Form1()
            {
                InitializeComponent();
                bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                g = Graphics.FromImage(bmp);
                i = 0;
            }
     
    /************************ bouton menu ouvrir image ***************************/
            private void ouvrirToolStripMenuItem_Click(object sender, EventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "fichiers bitmap (*.bmp)|*.bmp|fichiers jpg (*.jpg)|*.jpg";
     
                Stream mystream;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    if ((mystream = openFileDialog1.OpenFile()) != null)
                    {
                        img = new Bitmap(openFileDialog1.FileName);
                        pictureBox1.Image = bitmap;
                        g = Graphics.FromImage(bmp);
                        g.DrawImage(img, 0, 0);
                        mystream.Close();
                    }
                }    
            }
     
            /*********************** fonction pour dessiner une ligne*******************/
            void dessinerLigne(Point p)
            {
                x = p.X;
                y = p.Y;
                i++;
                pictureBox1.Image = bmp;
     
                if (i % 2 != 0)
                {
                    x2 = x;
                    y2 = y;
                }
                else
                {
                    g.DrawLine(new Pen(Color.Red), new Point(x2, y2), new Point(x, y));
                }
                pictureBox1.Invalidate(pictureBox1.ClientRectangle);
            }
     
    /***************************** pour sauvegarder ******************************/
            private void enregistrersousToolStripMenuItem_Click(object sender, EventArgs e)
            {
                SaveFileDialog sauve = new SaveFileDialog();
                sauve.Title = "Save as ...";
                sauve.InitialDirectory = "c:/";
                sauve.Filter = "Jpeg files (*.jpg)|*.jpg|Bitmap files (*.bmp)|*.bmp";
                if (sauve.ShowDialog() == DialogResult.OK)
                {
                    bmp.Save(sauve.FileName);
                }
     
            }
    voila une portion de mon code !!!
    a+

  10. #10
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    C'est peut être parce que tu ne ferme pas ton objet Graphics (tu n'appelle la méthode Dispose)

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    C'est ton code qui est complètement bancal...
    - Pourquoi tu ouvres le fichier (openFileDialog1.OpenFile) et qu'ensuite tu le charges à partir du nom de fichier, sans jamais utiliser le stream obtenu ? Si tu tiens à passer par un stream, dans ce cas utilise le constructeur de Bitmap qui prend un Stream en paramètre, parce que là ça sert à rien ce que tu fais...
    - Pourquoi tu crées 2 fois le Graphics (dans le constructeur et avant le DrawImage) ? Je suis pas sûr, mais il se pourrait que ça pose problème d'avoir 2 Graphics qui travaillent sur la même image...
    - C'est quoi cette variable "bitmap" dont on sait pas d'où elle sort ?

    J'ai testé comme ça et ça marche très bien, je dessine une ligne sur l'image source et l'enregistre dans un autre fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Image img = Image.FromFile(openFileDialog1.FileName);
                    Graphics g = Graphics.FromImage(img);
                    g.DrawLine(new Pen(Color.Red, 3.0F), 0, 0, 50, 50);
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        img.Save(saveFileDialog1.FileName);
                    }
                }
    L'image enregistrée contient bien la ligne.

Discussions similaires

  1. Ubuntu, probleme avec les pilotes graphiques
    Par onigiriri dans le forum Ubuntu
    Réponses: 15
    Dernier message: 28/09/2013, 18h15
  2. Deux ptt problemes avec les interface graphiques
    Par hidalg007 dans le forum NetBeans
    Réponses: 2
    Dernier message: 23/02/2009, 04h15
  3. Problème avec les pilotes graphique ATI
    Par vdumont dans le forum Matériel
    Réponses: 5
    Dernier message: 06/04/2006, 09h05
  4. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  5. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18

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