draw Bilder in Bild Box ziehen auf Maus zieht mit C#wie Zeichnungen in Bildfeld
Antwort
Sie es dann Grafiken wie von Bildfeld erhalten, indem der Erfassung des mousemove- Ereignisses von Bildfeld tun.
Grafik g = pictureBox.CreateGraphics(); dann können Sie zeichnen, was Sie zeichnen möchten mit diesem Grafikobjekt
Setzen Sie eine PictureBox auf Ihr Formular, und legen Sie die BackColor auf Weiß. Dann fügen Sie diesen Code in das Formular (Sie haben tatsächlich die Mausereignisse unten anschließen, das heißt man kann nicht einfach kopieren und diesen Code in das Formular einfügen):
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;
}
Und dann ziehen weg! Wenn Sie möchten, können Sie die Qualität des gezeichneten Bildes etwas verbessern, indem Sie die Eigenschaft Graphics
Objekt SmoothingMode
setzen.
Update: .Net CF die Pens
Sammlung does't haben, und MoustEventArgs
hat kein Location
, ist so hier eine CF-Version:
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;
}
danke für die Hilfe, aber ich habe Fehler, die nicht wissen Stifte und e.location – Gold
@Gold: nur eine CF-freundliche Version dieser Methode hinzugefügt, da CF nicht die Pens-Sammlung und MouseEventArgs hat nicht ein Ort (nur X und Y). – MusiGenesis
+1 für eine lange, detaillierte Antwort auf eine kurze, nicht so gut formulierte Frage. :) – JYelton
Hier PictureBox1 == Unterschrift . Ich übersetzte auf diese Weise vb:
Global:
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. Wie Bildfeld in Datei exportieren?
- 2. Wie man Bildfeld in Django manuell zuweist
- 3. Quick-Info für eigene Zeichnungen
- 4. Schatten auf verschiedene Zeichnungen in Canvas anwenden
- 5. Rendering von Zeichnungen in WPF schnell
- 6. Bildfeld Django hochladen
- 7. Numpy flattern RGB-Bildfeld
- 8. Django ModelForm Bildfeld Hochladen
- 9. Bildfeld enthält kein Wörterbuch
- 10. Bildfeld auf ReportViewer
- 11. Bildfeld aus Registerformular in Laravel entfernen
- 12. Sharepoint: Bildfeld mit einem Link
- 13. Kann anzeigen Video Frames nicht in Bildfeld
- 14. warum die Live camra Bildüberlappung in Bildfeld
- 15. benutzerdefiniertes Metabox-Bildfeld. Kein Bild
- 16. GL Zeichnungsansicht löscht Zeichnungen auf Rotation
- 17. Wie kann ich ein Bildfeld in meiner RentListAPIView anzeigen?
- 18. Ideen zum Rendern 2d AutoCAD-Zeichnungen in einem Browser
- 19. Zugriff auf Bildfeld auf Childform, C#
- 20. Automatisches Drehen des Bilds im Bildfeld
- 21. Sharepoint 2010 - Seite mit zugeschnittenem Bildfeld erstellen
- 22. Glass Mapper Standardwerte für Bildfeld zu brechen
- 23. Wie man django Bildfeld zu PIL Bild und zurück gehen?
- 24. Active Admin Bildfeld wird schmutzig angezeigt
- 25. fügen Sie ein Bildfeld zu Wordpress-Kategorie
- 26. Wie verwende ich einen ViewPager mit mehr als einem Bildfeld?
- 27. Java: Bestes OOP-Verhalten von Wgets, die Zeichnungen steuern
- 28. Android ändern Leinwand Hintergrundfarbe ohne irgendwelche Zeichnungen davon zu verlieren
- 29. Festlegen eines Intervalls zwischen Zeichnungen auf einem Canvas (C#)
- 30. Call Farbe rekursiv anfügen Zeichnungen auf einem Java-Applet
Eeeeep, Gott nein! Auf diese Weise erhalten Sie flockige Grafiken, der einzige Anwendungsfall für .CreateGraphics(), den ich kenne, ist das Messen von Strings. Sie möchten stattdessen OnPaint überschreiben. – Quibblesome
oder verwenden Sie die .Image-Eigenschaft. Wenn wir eine benutzerdefinierte Zeichnung erstellen, würde ich die Picturebox vollständig löschen und stattdessen von Control erben. – Quibblesome