Picturebox pb

Résolu
SfyLer Messages postés 38 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 31 décembre 2006 - 13 août 2006 à 20:26
SfyLer Messages postés 38 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 31 décembre 2006 - 14 août 2006 à 11:14
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

10 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
13 août 2006 à 20:34
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
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 août 2006 à 04:45
"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.
3
SfyLer Messages postés 38 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 31 décembre 2006
13 août 2006 à 20:41
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 ?
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
13 août 2006 à 20:54
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
0

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

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
13 août 2006 à 21:02
Je viens de faire un petit test donc, et ça marche très bien

VC# forever
0
SfyLer Messages postés 38 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 31 décembre 2006
13 août 2006 à 21:49
no pb, gentil d'avoir pris de ton tps, bonne continuation
0
SfyLer Messages postés 38 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 31 décembre 2006
13 août 2006 à 21:55
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
14 août 2006 à 09:03
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 août 2006 à 09:21
Oui ça marche, je dessine sur le bitmap, donc peu importe que la forme soit invalidée ou pas, mes dessins sont persistants.
0
SfyLer Messages postés 38 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 31 décembre 2006
14 août 2006 à 11:14
j'ai essayer c'est terrible ta solution
merci !
0
Rejoignez-nous