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 :

Enregistrement d'un bitmap.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Par défaut Enregistrement d'un bitmap.
    Bonjour,

    J'ai un formulaire qui me permet de dessiner sur une pictureBox à l'aide d'un graphic. Cela fonctionne bien. Mon problème est que je n'arrive pas à le relier à un bitmap, car lorsque j'enregistre mon bitmap, l'image enregistrer est juste un fond noir.

    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
    public partial class Form1 : Form
        {
            Point lastPoint = new Point();
            private List<Point> points = new List<Point>();
            private Graphics graphic;
            Pen pen = new Pen(Color.Black);
            Bitmap btmp;
     
            public Form1()
            {
                InitializeComponent();
     
                btmp = new Bitmap(pictureBox2.Width, pictureBox2.Height);
     
                graphic = Graphics.FromImage(btmp);
     
     
     
            }
     
     
             private void onMouseMouve(object sender, MouseEventArgs e)
            {
                points.Add(new Point(e.X, e.Y));
     
                graphic = pictureBox2.CreateGraphics();
                graphic.DrawLine(pen, lastPoint.X, lastPoint.Y, e.X, e.Y);
     
                lastPoint.X = e.X;
                lastPoint.Y = e.Y;
     
                Invalidate();
            }
     
     
     
            private void onMouseDown(object sender, MouseEventArgs e)
            {
                lastPoint.X = e.X;
                lastPoint.Y = e.Y;
     
                points.Clear();
                points.Add(lastPoint);
            }
     
            private void button1_Click(object sender, System.EventArgs e)
            {
                pictureBox2.Image = btmp;
                btmp.Save("signature.png", ImageFormat.Png);
     
     
            }
    Si quelqu'un sait d'où ça vient je suis preneur .

    Merci pour votre attention.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 147
    Par défaut
    Bonjour,
    la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     btmp = new Bitmap(pictureBox2.Width, pictureBox2.Height);
    crée un nouveau bitmap de la bonne dimension mais il est vide, pour obtenir le bitmap correspondant à ton image il faut faire,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bitmap btmp = new bitmap(PictureBox2.Image);

  3. #3
    Membre très actif Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Par défaut
    Le problème est que ça me fait une erreur de type NullReferenceException.

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut sauvegarder picturebox
    bonjour
    il faut relire tes definitions de classe bmp et picturebox.

    voici le code corrige en vb.net ,pas mechant
    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
     
    'code repris en vb.net mais pas mechant
    Imports System.Drawing.Imaging
     
    Public Class Form1
        Dim lastPoint As Point = New Point()
        Private points As List(Of point) = New List(Of point)
        Private graphic As Graphics
        Private pen As Pen = New Pen(Color.Black)
        Private btmp As Bitmap
     
        Public Sub New()
            InitializeComponent()
            PictureBox2.BackColor = Color.WhiteSmoke
            btmp = New Bitmap(PictureBox2.Width, PictureBox2.Height)
            graphic = Graphics.FromImage(btmp)
        End Sub
        Private Sub Form2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
            lastPoint.X = e.X
            lastPoint.Y = e.Y
            'pourquoi efface tu les lignes dessines?
            'tu n'auras riens dans le tableau memoire(ce qu'a laboure le chameau il l'aplatit-proverbe arabe) 
            'points.Clear()
            points.Add(lastPoint)
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'ici tu recupere dans picturebox pour visualiser le btmp
            PictureBox2.Image = btmp
            'c'est picturebox qui sait sauver les marrons pas le bmp
            PictureBox2.Image.Save("signature.png", ImageFormat.Png)
        End Sub
     
     
     
        Private Sub Form2_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
     
            'supprime moi ce create graphique(il est global ton graphics)
            'graphic = PictureBox2.CreateGraphics()
            graphic.DrawLine(pen, lastPoint.X, lastPoint.Y, e.X, e.Y)
     
            lastPoint.X = e.X
            lastPoint.Y = e.Y
     
            Update()
        End Sub
     
     
        Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
            points.Add(New Point(e.X, e.Y))
     
            Update()
        End Sub
    End Class
    bon code........

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    pour l'explication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    graphic = Graphics.FromImage(btmp);
    cette ligne de code dit que tout ce qui va être dessiné sur le graphics va l'être aussi sur le bitmap

    puis tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    graphic = pictureBox2.CreateGraphics();
    dans graphic tu mets une autre instance, à ce moment le contenu antérieur de la variable graphic part donc aux oubliettes et tu ne dessineras jamais dessus

    car une variable n'est qu'un pointeur vers une instance
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre très actif Avatar de Pynouz
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 274
    Par défaut
    Je vous remercie de vos réponse.

    Par contre, il y a quelque chose que je ne saisi pas : il faut bien que que je crée un graphic liée à ma picturebox afin que l'utilisateur voit sa signature quand il la dessine?

    Donc si j'initialise mon graphic ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    btmp = new Bitmap(pictureBox2.Width, pictureBox2.Height);           
    graphic = Graphics.FromImage(btmp);
    Comment faire en sorte qu'il puisse voir sa signature sur la picturebox pendant qu'il la fait?

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

Discussions similaires

  1. Enregistrement fichier bitmap
    Par Max67 dans le forum Android
    Réponses: 1
    Dernier message: 15/10/2012, 16h28
  2. enregistrer une Bitmap
    Par chorok24 dans le forum wxWidgets
    Réponses: 0
    Dernier message: 28/03/2008, 14h21
  3. [C#] Error enregistrer un bitmap dans un memorystream
    Par Ezekhiel dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 15/05/2007, 13h21
  4. Réponses: 6
    Dernier message: 21/09/2006, 16h08
  5. Enregistrement de 2 bitmap et de leurs donnees
    Par paolo2002 dans le forum Delphi
    Réponses: 4
    Dernier message: 07/08/2006, 14h09

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