7
votes

Comment dessiner des dessins dans une boîte d'images

Dessinez des images dans une boîte d'image sur la souris glissant à l'aide de C #


0 commentaires

3 Réponses :


0
votes

Vous pouvez le faire en capturant l'événement MOUSEMOVE de la boîte d'images, puis obtenir des graphiques à partir de la boîte d'images comme.

graphiques g = imagesbox.creatuegraphics (); Ensuite, vous pouvez dessiner tout ce que vous voulez dessiner à l'aide de cet objet graphique


2 commentaires

Eeeeep, Dieu non! Vous obtiendrez des graphiques de flickery de cette façon, la seule usecase pour .cretuegraphics () que je connaisse est de mesurer les chaînes. Vous voulez remplacer à la place sur PAINT.


ou utiliser la propriété .Image. Si nous allons faire un dessin coutume, mais je tuerais complètement la boîte à images et hériter du contrôle.



21
votes

Mettez une image sur votre formulaire et définissez son backcolor sur blanc. Ensuite, ajoutez ce code à votre formulaire (vous devez réellement connecter les événements de la souris ci-dessous, c'est-à-dire que vous ne pouvez pas simplement copier et coller ce code dans votre formulaire):

private Point? _Previous = null;
private Pen _Pen = new Pen(Color.Black);
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    _Previous = new Point(e.X, e.Y);
    pictureBox1_MouseMove(sender, e);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (_Previous != null)
    {
        if (pictureBox1.Image == null)
        {
            Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.Clear(Color.White);
            }
            pictureBox1.Image = bmp;
        }
        using (Graphics g = Graphics.FromImage(pictureBox1.Image))
        {
            g.DrawLine(_Pen, _Previous.Value.X, _Previous.Value.Y, e.X, e.Y);
        }
        pictureBox1.Invalidate();
        _Previous = new Point(e.X, e.Y);
    }
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    _Previous = null;
}


8 commentaires

merci pour l'aide, mais j'ai eu une erreur qui ne connaissait pas les stylos et e.Location


@Gold: Il suffit d'ajouter une version conviviale de cette méthode de cette méthode, car cf ne dispose pas de la collection de stylos et de Mouseeventargs n'a pas de localisation (juste x et y).


+1 Pour une réponse longue et détaillée à une question courte et non aussi bien libellée. :)


Je devais changer le code à: g.drwine (_pen, _previous.value.x, _previous.value.y, e.x, E.y); travailler pour moi à Win Mobile 6.5


@Tim: On dirait que c'est un problème de .NET CF 3.5, mais cela pourrait revenir encore plus loin. Bizarre, parce que je pensais avoir exécuté ce code sur un appareil réel, mais peut-être pas.


Pas de soucis - il était facile de corriger - doit être une version ultérieure de .NET. En tout cas, merci pour le code et +1 de moi.


Je sais que cette réponse est assez ancienne, mais après avoir peint comment vous pouviez enregistrer le fichier?


@NDERMANAPM: imagesbox1.image.save (@ "chemin", imageformat.jpeg); (remplacez @path avec un chemin réel)



3
votes

ici, imagebox1 == Signature. J'ai traduit en VB de cette manière:

global: xxx


0 commentaires