imágenes de dibujo en la caja de imagen en el ratón arrastrando con C#cómo dibujar dibujos en cuadro de imagen
Respuesta
Puede hacerlo mediante la captura el evento MouseMove del cuadro de imagen a continuación, obtener gráficos de cuadro de imagen similares.
Gráficos g = pictureBox.CreateGraphics(); luego puede dibujar lo que desee dibujar con este objeto gráfico
Coloque un PictureBox en su formulario y establezca su BackColor en blanco. A continuación, agregue este código a su forma (hay que conectar realmente los eventos del ratón a continuación, es decir, no se puede simplemente copiar y pegar este código en su forma):
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;
}
Y luego arrastrar!
Si se quiere, se puede mejorar la calidad de la imagen dibujada en parte por el establecimiento de la propiedad del objeto Graphics
SmoothingMode
.
Actualización: .Net CF does't tener la colección Pens
y MoustEventArgs
no tiene un Location
, asi que aquí hay una versión CF-amigable:
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;
}
gracias por la ayuda, pero tengo un error que no conozco las plumas y la ubicación electrónica. – Gold
@ Oro: acaba de agregar una versión compatible con CF de este método, ya que CF no tiene la colección Pens y MouseEventArgs no tiene a Ubicación (solo X e Y). – MusiGenesis
+1 para una respuesta larga y detallada a una pregunta corta, no tan bien redactada. :) – JYelton
Aquí, pictureBox1 == firma . Traduje a VB de este modo:
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. ¿Cómo dibujar texto en cuadro de imagen?
- 2. Cómo dibujar la imagen swt?
- 3. Cómo dibujar una imagen en una ventana?
- 4. cómo dibujar una línea en una imagen?
- 5. dibujar objeto/imagen en lienzo
- 6. dibujos animados de imágenes reales
- 7. OpenCV dibujar una imagen sobre otra imagen
- 8. Dibujar rectángulo sobre la imagen
- 9. Animación para drawRect dibujos
- 10. Dibujar puntos en la imagen usando jQuery
- 11. ¿Cómo puedo seleccionar un cuadro de imagen?
- 12. Cómo dibujar una imagen en un subelemento en ListView
- 13. imagen Escalado del cuadro de imagen
- 14. Cómo dibujar una línea en una imagen en matlab?
- 15. Dibujar líneas múltiples en una Imagen Buffered
- 16. PyPNG para dibujar un cuadro lleno simple
- 17. En matlab, cómo dibujar una grilla sobre una imagen
- 18. cómo dibujar una imagen en un lienzo con transparencia/alfa
- 19. Un cuadro de imagen Problema
- 20. Mostrar cuadro de imagen más rápido
- 21. Convertir fotos en dibujos animados usando PHP
- 22. C# dibujando un rectángulo en un cuadro de imagen?
- 23. dibujos de lona, como líneas, son borrosas
- 24. Para convertir imágenes a dibujos animados en ios
- 25. cómo insertar una imagen en un cuadro de texto
- 26. ¿Cómo dibujar en un JLabel?
- 27. Cómo establecer la imagen de fondo de un lienzo html 5 en la imagen .png
- 28. ¿Cómo puedo dibujar texto usando Libgdx/Java?
- 29. Cómo dibujar gráficos en Android?
- 30. ¿Cuál es la forma más rápida de dibujar una imagen en Gtk +?
Eeeeep, dios no! Obtendrá gráficos parpadeantes de esta manera, el único caso de uso para .CreateGraphics() que conozco es para medir cadenas. En su lugar, desea sobrescribir OnPaint. – Quibblesome
o use la propiedad .Image. Si vamos a hacer un dibujo personalizado, mataría a picturebox por completo y heredaría de Control en su lugar. – Quibblesome