Quiero usar el dibujo GDI + en mi control WPF.¿Cómo usar el dibujo GDI + en WPF?
Respuesta
Intente componer un Windows Form User Control en su proyecto WPF y encapsule el dibujo GDI + en él. Ver Walkthrough: Hosting a Windows Forms User Control by Using the WPF Designer
Sin usar WinForms, ¿hay alguna forma de usar el dibujo GDI + utilizando la clase System :: Drawing :: Graphics? – Sreenath
WPF viene con nuevas características de gráficos, puede investigar here, pero si desea utilizar una vieja API de GDI + una forma de hacerlo es crear Winform dibujar allí y alojarlo en WPF
Sin usar WinForms, ¿hay alguna forma de usar el dibujo GDI + utilizando la clase System :: Drawing :: Graphics? – Sreenath
Puede escribir interoperabilidad nativa usando dllimport a GDI + –
También http://stackoverflow.com/questions/271686/c-transition-between-gdi-and-wpf esta publicación puede ayudar –
Este generalmente es una mala idea WPF es una API completamente nueva y la mezcla en GDI + puede dar como resultado un bajo rendimiento, pérdidas de memoria y otras cosas indeseables.
Esta respuesta obviamente no se basa en ninguna experiencia real con esas tecnologías. –
Hay varias maneras de hacerlo, lo más fácil sería bloquear el mapa de bits manipulado con GDI, obtener el buffer de píxeles (Scan0 IntPtr en el BitmapData que obtiene del bloqueo). CopyMemory(...) de su memoria tampón de píxeles a WriteableBitmap.BackBuffer.
Hay formas más efectivas en WPF, como usar InteropBitmap en lugar de WriteableBitmap. Pero eso necesita más p/invoke.
@Jeremiah La solución de Morrill es lo que harías en el núcleo. Sin embargo, Microsoft fue lo suficientemente bueno como para proporcionar algunos métodos de interoperabilidad:
using System.Windows.Interop;
using Gdi = System.Drawing;
using (var tempBitmap = new Gdi.Bitmap(width, height))
{
using (var g = Gdi.Graphics.FromImage(tempBitmap))
{
// Your GDI drawing here.
}
// Copy GDI bitmap to WPF bitmap.
var hbmp = tempBitmap.GetHbitmap();
var options = BitmapSizeOptions.FromEmptyOptions();
this.WpfTarget.Source = Imaging.CreateBitmapSourceFromHBitmap(hbmp,
IntPtr.Zero, Int32Rect.Empty, options);
}
// Redraw the WPF Image control.
this.WpfTarget.InvalidateMeasure();
this.WpfTarget.InvalidateVisual();
¿Cuál es el espacio de nombres 'Gdi'? Parece que tiene un alias 'System.Drawing' a' Gdi (es decir, usando Gdi = System.Drawing) '- ¿puede confirmar? –
Aliasing System.Drawing a Gdi en este ejemplo es una muy mala idea ya que no se puede simplemente copiar y pegar el código y también agrega más confusión para los lectores. – CyberFox
- 1. Elipse Dibujo Animación WPF
- 2. Píxeles de dibujo en WPF
- 3. Conversión de GDI + PixelFormat a WPF PixelFormat
- 4. Elegir entre Dibujo y Forma en WPF
- 5. WinForms: ¿cuál es el mejor control para la superficie de dibujo GDI +?
- 6. Cómo rotar el texto en GDI +?
- 7. cómo rellenar degradado para roundrect en gdi puro (no gdi +)
- 8. Dibujando muchos rectángulos en GDI +
- 9. ¿Cómo usar XNA en WPF?
- 10. Cómo usar DrawThemeTextEx en WPF
- 11. Cómo funciona GDI/GDI + sin OpenGL o DirectX
- 12. El texto de dibujo GDI + con diferentes tamaños en una línea de base tiene problemas de 0x1
- 13. ¿Puedo obtener HDC desde la ventana de WPF para poder dibujar con Gdi + API?
- 14. Gestiones GDI en una aplicación DotNET
- 15. Cómo rotar Bitmap en Windows GDI?
- 16. Cómo usar un ContextMenu UserControl en WPF?
- 17. Usar MonoGame en WPF
- 18. ¿Cómo puedo usar RelayCommand en wpf?
- 19. Cómo usar MultiBinding en un WPF ComboBox
- 20. Cómo usar controles personalizados en WPF
- 21. GDI + doble búfer en C++
- 22. Cómo usar el control del navegador WebKit en WPF
- 23. ¿Cómo aumentar el rendimiento sobre DrawImage de GDI (sin escala)?
- 24. ¿Cómo cargaría una imagen PNG usando Win32/GDI (sin GDI + si es posible)?
- 25. un error genérico en GDI +
- 26. Cómo deshabilitar el dibujo en el búfer de color
- 27. flechas dibujo con datos de la trayectoria WPF
- 28. Cómo animar el dibujo de un CGPath?
- 29. ¿Cómo obtengo las coordenadas con el dibujo?
- 30. ¿Puedo usar varias formas en un dibujo extraíble de Android?
¿por qué? Me encantaría saber – moogs
Rendimiento. GDI es mucho más rápido que WPF al dibujar un gran número de líneas, formas –