Probleme avec pictureBox

ralf9 Messages postés 14 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 14 mars 2010 - 27 mars 2008 à 21:51
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 31 mars 2008 à 21:09
bonjour !

voila j'ai un problème avec le pictureBox ??? j'ai fait un code qui charge une image dans pictureBox.

en suite j'ai fait des graphiques (lignes, points) que je dois afficher aussi dans la même pictureBox !!!!

voici mon code complet :

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
g = Graphics.FromImage(bmp);

}

private Bitmap bmp;
private Graphics g;
int x, y, x2, y2, i;
 

privatevoid openShapeToolStripMenuItem_Click(object sender, EventArgs e)
{
openFileDialog1.Title = "Choose a shape...";
openFileDialog1.DefaultExt = "jpg";
openFileDialog1.Filter = "Files image JPEG (*.jpg)|*.jpg|Files bitmap(*.bmp)|*.bmp";
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
Bitmap img = new Bitmap(openFileDialog1.FileName);
pictureBox1.Image = img;

}

}

// cette methode c'est juste pour recuperer la prostion de la souris quand je clique dans pictureBox
privatevoid pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
x = e.Location.X;
y = e.Location.Y;
i++;
 
dessin();
}
privatevoid dessin()
{
 
g.DrawEllipse(new Pen(Color.Red, 2.0f), new Rectangle(new Point(x, y), new Size(4, 4)));
// les testes c'est juste pour faire quand je clique deux fois je dessine une ligne
if(i % 2 != 0)
{
x2 = x;
y2 = y;
}
else
{
g.DrawLine(new Pen(Color.Red), new Point(x2, y2), new Point(x, y));
pictureBox1.Image = bmp;
}
}
}
}

le problème ici c'est que quand je charge l'image sur la pictureBox en
suite je dessine mon graphique la l'image disparaisse ???
qu'est ce que je dois faire pour éviter ce problème ? j'ai pensé a un
truc et ça marche ! c'est de mettre l'image en arrière plan de la
pictureBox mais je pense pas que c'est une bonne idée !! car je veux
récupérer a la fin l'image avec les graphiques (lignes et points)
dessus voila !!!

merci

a+

10 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
27 mars 2008 à 22:50
Salut

Voici un code fonctionnel

        public Form1()
        {
            InitializeComponent();
            bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            g = Graphics.FromImage(bmp);

        }

        private Bitmap bmp;
        private Graphics g;
        int x, y, x2, y2, i;

        // cette methode c'est juste pour recuperer la prostion de la souris quand je clique dans pictureBox
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            x = e.Location.X;
            y = e.Location.Y;
            i++;

            dessin();
        }
        private void dessin()
        {

            g.DrawEllipse(new Pen(Color.Red, 2.0f), new Rectangle(new Point(x, y), new Size(4, 4)));
            // les testes c'est juste pour faire quand je clique deux fois je dessine une ligne
            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();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.Title = "Choose a shape...";
            openFileDialog1.DefaultExt = "jpg";
            openFileDialog1.Filter = "Files image JPEG (*.jpg)|*.jpg|Files bitmap(*.bmp)|*.bmp";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Bitmap img = new Bitmap(openFileDialog1.FileName);
                pictureBox1.Image = img;
                g = Graphics.FromImage(pictureBox1.Image);

            }
        }
0
ralf9 Messages postés 14 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 14 mars 2010
28 mars 2008 à 00:28
salut !!!
merci pour ton aide !! désolé de te dire que ça na pas marché ! ben toujour le meme probleme la premiere image c'est bon mais pour le dessin non !
j'espere que t'as compris ce que je veux faire c'est de dessiner des lignes avec des points au dessus de l'image !!
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
28 mars 2008 à 13:41
Désolé
Je viens de le refaire et ca fonctionne.

Nouveau projet
un picturebox
un opendialog
on colle tout mon code
on rebranche les 2 eveneements
et ca fonctionne

J'ai des lignes rouge dessus mon image
entre le click1 et le click2 sur la souris

Quelle est ton erreur?

 
0
ralf9 Messages postés 14 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 14 mars 2010
29 mars 2008 à 13:46
salut !!
je viens de reessayer ton code et ca ne marche pas encore !! pas d'erreur de compilation mais par contre aucune ligne ni point se dessine au dessus de l'image  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
29 mars 2008 à 22:44
Tu n'a surement pas
mis correctement mon code
la picture box est bien avec les attributs par defaut
sinon tu as une translation effectuer pour les remettre a l'echelle

exemple une image reduite par 5 dans la picture box ---> la ligne reduite par 5 dans la picturebox et donc peut invisible
essaye avec une image blanche et tes points rouge et tu veras mieux
0
ralf9 Messages postés 14 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 14 mars 2010
31 mars 2008 à 00:02
salut
je ne peux pas me tromper car j'ai fait un copier/coller de ton code  !! j'ai ajoute uniquement le code qui me permet d'ouvrir une image a partir du disque dur !! voila le code qui charge une image en utilisant le openFileDialog !!!

openFileDialog1.Title =
"Choose a shape...";


openFileDialog1.DefaultExt = "jpg";


openFileDialog1.Filter = "Images file JPEG (*.jpg)|*.jpg|Bitmap file (*.bmp)|*.bmp";



if
(openFileDialog1.ShowDialog() ==

DialogResult
.OK)



{



Bitmap
img =

new



Bitmap
(openFileDialog1.FileName);



pictureBox1.Image=img;


}
c'est tout !!!!!!!!
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
31 mars 2008 à 09:57
Et le code dans button1_Click, il ne permet de charger une image à partir du disque dur??

Il manque la ligne que j'ai mis en bleu car tres important?

g = Graphics.FromImage(pictureBox1.Image);
0
ralf9 Messages postés 14 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 14 mars 2010
31 mars 2008 à 18:36
salut voila essaye ce code la stp,

namespace

WindowsFormsApplication1{

      public
partial
class
Form1 :
Form      {

            private
Bitmap bmp;

            private
Graphics g;

            int x, y, x2, y2, i;

            public Form1()            {

                     InitializeComponent();

                     bmp =

new
Bitmap(pictureBox1.Width, pictureBox1.Height);                     g =

Graphics.FromImage(bmp);            }

            private
void pictureBox1_MouseClick(
object sender,
MouseEventArgs e)            {

                  x = e.Location.X;

                  y = e.Location.Y;

                  i++;

               dessin();

            }

            private
void dessin()            {

                  g.DrawEllipse(

new
Pen(
Color.Red, 2.0f),
new
Rectangle(
new
Point(x, y),
new
Size(4, 4)));

// les testes c'est juste pour faire quand je clique deux fois je dessine une ligne

                  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();

           }

            private
void openToolStripMenuItem_Click(
object sender,
EventArgs e)              {
                     openFileDialog1.Title "Choose a shape...";                     openFileDialog1.DefaultExt

"jpg";                     openFileDialog1.Filter =

"Files image JPEG (*.jpg)|*.jpg|Files bitmap(*.bmp)|*.bmp";

                     if (openFileDialog1.ShowDialog() ==
DialogResult.OK)                     {

                              Bitmap img =
new
Bitmap(openFileDialog1.FileName);                              pictureBox1.Image = img;

                              g =

Graphics.FromImage(pictureBox1.Image);                     }

         }

         private
void saveShapeToolStripMenuItem_Click(
object sender,
EventArgs e)          {

               SaveFileDialog sauve =
newSaveFileDialog();               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);

                 }

         }

}

}

et sur la forme tu mets :
- openFileDialog
- saveFileDialog
- pictureBox
- menuStrip (load puis open et dans open tu mets le code pour ouvrir une image et sauve shape pour sauvgarder le contenu de pictureBox )

le resultat souhaite : mettre sur la pictureBox une image en suite quand je clique a l'interieur de pictureBox le programme dessine un point et si je clique une deuxieme fois le programme dessine un autre point et une ligne qui relie les deux points ! en suite quand tu sauvgarde l'image obtenue doit contenir les points et la ligne essaye ton code et tu veras si ca marche !!! (je pense pas ! j'ai meme pas pu dessiner les deux points et la ligne avec)
a+
0
ralf9 Messages postés 14 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 14 mars 2010
31 mars 2008 à 18:37
ahh desole pour l ecriture !!!
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
31 mars 2008 à 21:09
Apres avoir reparé une petite erreur (utilisation de img à la place de bmp)

Mon code fonctionne pour la sauvegarde aussi

Il te reste a faire la sauvegarde multi format  (elle ne fait que le gif sur un bouton la mienne.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Drawing.Imaging;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
       }

        private Bitmap bmp;
        private Graphics g;
        int x, y, x2, y2, i;

        // cette methode c'est juste pour recuperer la prostion de la souris quand je clique dans pictureBox
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            x = e.Location.X;
            y = e.Location.Y;
            i++;

            dessin();
        }
        private void dessin()
        {

            g.DrawEllipse(new Pen(Color.Red, 2.0f), new Rectangle(new Point(x, y), new Size(4, 4)));
            // les testes c'est juste pour faire quand je clique deux fois je dessine une ligne
            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();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.Title = "Choose a shape...";
            openFileDialog1.DefaultExt = "jpg";
            openFileDialog1.Filter = "Files image JPEG (*.jpg)|*.jpg|Files bitmap(*.bmp)|*.bmp";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                 bmp = new Bitmap(openFileDialog1.FileName);
                pictureBox1.Image = bmp;
                g = Graphics.FromImage(bmp);

            }
        }

        private void button2_Click(object sender, EventArgs e)
        {  
            bmp.Save(@"e:\save.gif",ImageFormat.Gif);
        }

 

      
    }
}
0
Rejoignez-nous