images dessiner dans l'image Box sur la souris en faisant glisser à l'aide C#comment dessiner des dessins dans la boîte d'image
Répondre
Vous pouvez le faire en capturant l'événement MouseMove de zone d'image alors obtenir des graphiques de zone d'image comme.
Graphiques g = pictureBox.CreateGraphics(); puis vous pouvez dessiner ce que vous voulez dessiner en utilisant cet objet graphique
Placez un PictureBox sur votre formulaire et définissez sa BackColor sur blanc. Ensuite, ajoutez ce code à votre formulaire (vous devez réellement brancher les événements de souris ci-dessous, à savoir que vous ne pouvez pas simplement copier et coller ce code dans votre formulaire):
private Point? _Previous = null;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
_Previous = e.Location;
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(Pens.Black, _Previous.Value, e.Location);
}
pictureBox1.Invalidate();
_Previous = e.Location;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
_Previous = null;
}
Et puis tirer loin! Si vous le souhaitez, vous pouvez améliorer la qualité de l'image dessinée en définissant la propriété SmoothingMode
de l'objet Graphics
.
Mise à jour: .Net CF does't ont la collection Pens
et MoustEventArgs
ne dispose pas d'un Location
, alors voici une version CF-friendly:
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;
}
merci pour l'aide, mais j'ai eu erreur qui ne sait pas stylos et e.location – Gold
@ Or: juste ajouté une version CF-friendly de cette méthode, car CF n'a pas la collection Pens et MouseEventArgs n'a pas un emplacement (juste X et Y). – MusiGenesis
+1 pour une réponse longue et détaillée à une question courte, pas très bien formulée. :) – JYelton
Ici, pictureBox1 signature == . Je traduis Vb de cette manière:
mondiale:
Dim _previous As Point = Nothing
Dim _pen As Pen = New Pen(Color.Black)
Dim drawing As Boolean = False
''' <summary>
''' This handles the signature drawing events (drawing)
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub signature_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles signature.MouseMove
If drawing = True Then
If signature.Image Is Nothing Then
Dim bmp As Bitmap = New Bitmap(signature.Width, signature.Height)
Using g As Graphics = Graphics.FromImage(bmp)
g.Clear(Color.White)
End Using
signature.Image = bmp
End If
Using g As Graphics = Graphics.FromImage(signature.Image)
g.DrawLine(_pen, _previous.X, _previous.Y, e.X, e.Y)
End Using
signature.Invalidate()
_previous = New Point(e.X, e.Y)
End If
End Sub
''' <summary>
''' this indicates somebody is going to write a signature
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub signature_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles signature.MouseDown
_previous = New Point(e.X, e.Y)
drawing = True
signature_MouseMove(sender, e)
End Sub
''' <summary>
''' the signature is done.
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub signature_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles signature.MouseUp
_previous = Nothing
drawing = False
End Sub
- 1. Comment puis-je dessiner une boîte en utilisant css comme la boîte de réponse dans stackoverflow?
- 2. Dessiner des graphiques dans VBScript
- 3. Comment empêcher les dessins dans un contexte UIView de disparaître?
- 4. Comment dessiner des graphiques dans JSP
- 5. Comment dessiner dans la zone non-client?
- 6. Dessiner des formes ou des images sur une trajectoire courbe
- 7. Dessiner une boîte sur une image, javascript seulement?
- 8. Dessiner Cercle simple dans la boîte de liste en C# .Net Desktop Application
- 9. Dessiner des couleurs dans une zone d'image?
- 10. Dessiner des coins arrondis sur la photo avec PIL
- 11. Comment dessiner des graphismes simples en C#?
- 12. Comment dessiner des polygones transparents avec Python?
- 13. Comment dessiner des bordures de cellules dans un FlexGridSizer wxPython?
- 14. Comment pouvez-vous dessiner des primitives dans OpenGL interactivement?
- 15. comment dessiner des lignes sur un fond d'image dans pygame
- 16. Quelle est la meilleure façon de dessiner des objets et de les traiter?
- 17. Besoin de dessiner à la boîte de 800 * 800 pixels à l'écran efficacement
- 18. jquery boîte d'alerte désactivant la boîte d'entrée
- 19. Comment dessiner la métaclasse d'une classe dans UML?
- 20. Comment dessiner des points, des lignes et obtenir des coordonnées dans la toile dans le schéma PLT?
- 21. Comment dessiner un Piechart dans l'iPhone
- 22. Dessiner des caractères Unicode sur l'iPhone
- 23. Utilisation de wpf pour dessiner des arrière-plans mis à l'échelle avec des ressources minimales
- 24. Quelle est la meilleure façon de dessiner des contrôles "enfants" (tels que des boutons) dans chaque élément d'une boîte aux lettres WinForms?
- 25. comment obtenir des messages dans la boîte de réception de facebook en utilisant la requête fql?
- 26. Comment placer des sous-contrôles dans une boîte de groupe?
- 27. Générer des bitmaps et les dessiner
- 28. Comment puis-je modifier l'action des boutons dans la boîte de dialogue dans jQuery?
- 29. Comment dessiner diagramme d'architecture d'application
- 30. Comment dessiner des graphiques opengl à partir de différents threads?
Eeeeep, dieu non! Vous obtiendrez des graphismes flickery de cette façon, la seule utilisation pour .CreateGraphics() que je connais est de mesurer les chaînes. Vous voulez remplacer OnPaint à la place. – Quibblesome
ou utilisez la propriété .Image. Si nous allons faire du dessin personnalisé, je tuerais complètement Picturebox et hériterais de Control à la place. – Quibblesome