Picturebox pb [Résolu]

Signaler
Messages postés
38
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
31 décembre 2006
-
Messages postés
38
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
31 décembre 2006
-
Bonjour à tous,
voilà mon pb, j'ai un picturebox et je lui attribue une image bitmap.
ensuite je permet a l'utilisateur de redéssiné par dessus
seul pb quand je fais un picturebox.Image.Save(path...); tout ce que l'utilisateur à déssiné disparait.
Pouver vous m'aider ? c'est assez urgent
A voir également:

10 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Salut,
Pfoulala c'est pas si facile que ça ;-)
Je pense que le moyen le plus facile que tu as encore, est de faire une capture de l'image (à vrai dire je ne suis même pas tout à fait sûr que ça marche).

Tu peux jeter un oeil sur ce snippet et sur ce tutorial de Mx pour voir de quoi je parle.







VC# forever
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
"j'ai un picturebox et je lui attribue une image bitmap. ensuite je permet a l'utilisateur de redéssiné par dessus"

Tu dois dessiner avec le Graphics de l'image, utilise Graphic.FromImage pour le récupérer, ainsi tu dessinera directement sur l'image, pour voir les modifications tu dois invalider la PictureBox, PictureBox.Invalidate, et tu sauvegardes avec Picture.Image.Save.

public partial class Form1 : Form
{
    private Bitmap bitmap = null;
    private Graphics graphics = null;
    private PictureBox pictureBox = null;
    private Point startPoint = Point.Empty;


    public Form1( )
    {
        InitializeComponent( );


        bitmap = new Bitmap( "image.jpg" );
        graphics = Graphics.FromImage( bitmap );
       
        pictureBox = new PictureBox( );
        pictureBox.Dock = DockStyle.Fill;
        pictureBox.ContextMenu = new ContextMenu
        (
            new MenuItem[ ]
            {
                new MenuItem
                (
                    "Save",
                    PictureBox_SaveFile
                )
            }
        );
        pictureBox.Image = bitmap;
        pictureBox.MouseDown += PictureBox_MouseDown;
        pictureBox.MouseMove += PictureBox_MouseMove;


        this.Controls.Add( pictureBox );
    }
       


    private void PictureBox_SaveFile( object sd, EventArgs e )
    {
        SaveFileDialog saveFileDalog = new SaveFileDialog( );


        if ( saveFileDalog.ShowDialog( ) == DialogResult.OK )
            pictureBox.Image.Save( saveFileDalog.FileName );
    }


    private void PictureBox_MouseDown( object sd, MouseEventArgs e )
    {
        if ( e.Button == MouseButtons.Left )
            startPoint = e.Location;
    }


    private void PictureBox_MouseMove( object sd, MouseEventArgs e )
    {
        if ( e.Button == MouseButtons.Left )
        {
            GraphicsPath path = new GraphicsPath( );
            path.AddLine( startPoint, e.Location );
            startPoint = e.Location;


            graphics.DrawPath( Pens.Black, path );
            pictureBox.Invalidate( pictureBox.ClientRectangle );
        }
    }


Mais à mon avis tu devrais te passer de la PictureBox et dessiner sur un backbuffer puis l'afficher sur la forme ou sur un contrôle via Graphics.DrawImage.
Messages postés
38
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
31 décembre 2006

oui c'etait mon idée mais comme tu la dis c'est un peu chian a mettre en oeuvre
n'y aurai t'il pas une solution + simple ?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Euh non justement, la solution est relativement simple si tu fais une capture...
T'as qu'à regarder les deux liens que je t'ai filé!

VC# forever
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Je viens de faire un petit test donc, et ça marche très bien

VC# forever
Messages postés
38
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
31 décembre 2006

no pb, gentil d'avoir pris de ton tps, bonne continuation
Messages postés
38
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
31 décembre 2006

après essai cela ne fonctionne pas, l'image du composant picturebox a bien été créé mais les traits rajouté par l'utilisateur n'aparaisse toujours pas
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Lutinore> Tu es essayé ton code? Je ne suis pas sûr qu'il marche : après avoir fait un premier test, j'ai sauvé l'image et les dessins fait après coup n'apparaissait pas (j'ai fait un code rapide avec drawLine dans l'event MouseUp)! Puis j'ai mis la méthode de dessins dans le onPaint du pictureBox, et la ça marchait...

Dans ton exemple, si l'utilisateur clique sur un bouton après avoir fait ses modifications pour sauver la nouvelle image, je me demande si elles seront conservées étant donné que tu dessines dans le MouseMove (et si entre temps, l'application perd le focus et/ou une autre fenêtre passe par dessus?).

VC# forever
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
Oui ça marche, je dessine sur le bitmap, donc peu importe que la forme soit invalidée ou pas, mes dessins sont persistants.
Messages postés
38
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
31 décembre 2006

j'ai essayer c'est terrible ta solution
merci !