Estoy dibujando un gráfico en un control, pero 0,0 está en la esquina superior izquierda del control. ¿Hay alguna manera de voltear las coordenadas para que 0,0 esté en la esquina inferior izquierda del control?voltear coordenadas al dibujar para controlar
Respuesta
Si está utilizando Windows Forms, entonces usted podría encontrar que usted puede voltear el eje Y usando Graphics.ScaleTransform:
private void ScaleTransformFloat(PaintEventArgs e)
{
// Begin graphics container
GraphicsContainer containerState = e.Graphics.BeginContainer();
// Flip the Y-Axis
e.Graphics.ScaleTransform(1.0F, -1.0F);
// Translate the drawing area accordingly
e.Graphics.TranslateTransform(0.0F, -(float)Height);
// Whatever you draw now (using this graphics context) will appear as
// though (0,0) were at the bottom left corner
e.Graphics.DrawRectangle(new Pen(Color.Blue, 3), 50, 0, 100, 40);
// End graphics container
e.Graphics.EndContainer(containerState);
// Other drawing actions here...
}
Sólo es necesario incluir el inicio llamadas contenedor/END si usted quiere hacer el dibujo adicional usando el sistema de coordenadas regular también. Más información sobre contenedores gráficos es available on MSDN.
Según lo mencionado por Tom en los comentarios, este enfoque requiere que el valor Height
esté disponible con un valor correcto. Si prueba esto y no ve nada, asegúrese de que el valor sea correcto en un depurador.
También debe agregar la traducción para que esto funcione correctamente. – Eric
Gracias Eric. Actualicé mi respuesta e incluí información sobre el uso de contenedores de gráficos para aislar estas transformaciones de otros cambios. –
No funcionó para mí. No soy un wiz WinForms todavía. Como resulta "Altura" no se relaciona con el control actual. Llamé a esto en mi panel. En Pintura y nada se pintó. Mencionar que usted supone que está utilizando el formulario en sí mismo podría ahorrarle tiempo a otros, ya que podría haberme ahorrado tiempo de depuración;) – Tom
No, pero utilizando las propiedades Size
(o Height
) del control, es fácil calcular las coordenadas volteadas: simplemente dibuje a Height-y
.
No lo sé pero si usa (x, Control.Height-y) obtendrá el mismo efecto.
en definitiva no, sin embargo, si me baso en los controles de un montón tengo unas pocas funciones que me ayudan:
Point GraphFromRaster(Point point) {...}
Point RasterFromGraph(Point point) {...}
esta manera guardo toda la conversión en un solo lugar, sin tener que preocuparse por cosas como y - this.Height
dispersos por el código.
¿por qué el voto hacia abajo? – Pondidum
Aquí hay un control de usuario simple que muestra cómo hacer esto:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.ScaleTransform(1.0F, -1.0F);
e.Graphics.TranslateTransform(0.0F, -(float)Height);
e.Graphics.DrawLine(Pens.Black, new Point(0, 0), new Point(Width, Height));
base.OnPaint(e);
}
}
- 1. Dibujar cuadrado con coordenadas polares
- 2. Problema al voltear la cámara
- 3. Voltear la textura OpenGL
- 4. Voltear imagen con Graphics2D
- 5. cómo voltear un mapa de puntos para dibujar una textura en libgdx?
- 6. Voltear-Animación para Activity-Change
- 7. Coordenadas del mouse relativas al fotograma
- 8. Seguimiento de Android coordenadas x, y dibujar desde la ruta
- 9. Cómo dibujar un png-osm-map con las coordenadas
- 10. Voltear, crecer y Traducir animación
- 11. Voltear UIViews desde arriba/abajo
- 12. Voltear el sombreador de vértices invertido (GLES)
- 13. ¿Cómo se puede compensar el sistema de coordenadas volteado de los gráficos centrales para dibujar fácilmente?
- 14. Voltear un sprite en lienzo
- 15. Oyente para widget de ViewFlipper voltear eventos
- 16. "No implementado" Excepción al usar pywin32 para controlar Adobe Acrobat
- 17. Usar ventana/ventana gráfica para voltear el eje y de QPainter
- 18. De HWND para controlar
- 19. personalizada al dibujar sobre lienzo
- 20. Voltear bits en python
- 21. Cómo voltear un JFrame y sus hijos al revés?
- 22. Rendimiento al dibujar CGPaths con frecuencia
- 23. UIView voltear verticalmente
- 24. voltear/duplicación de imágenes
- 25. Android ViewFlipper no voltear
- 26. al obtener la ubicación de coordenadas
- 27. manejo de eventos OnClick para la lona en javascript y obtener sus coordenadas
- 28. ¿Se está mejorando al dibujar en el código para Cocoa?
- 29. SQL ¿Actualizar para voltear el signo de un valor?
- 30. función para controlar/demangle funciones
¿Está utilizando Windows Forms o WPF? Es posible que desee actualizar las etiquetas de su pregunta. –