Desidero utilizzare il disegno GDI + nel mio controllo WPF.Come utilizzare il disegno GDI + in WPF?
risposta
Provare a comporre un controllo utente di Windows Form nel progetto WPF e incapsulare GDI + in esso. Vedi Walkthrough: Hosting a Windows Forms User Control by Using the WPF Designer
Senza usare WinForms c'è un modo per usare il disegno GDI + usando la classe System :: Drawing :: Graphics? – Sreenath
WPF è dotato di nuove funzionalità grafiche, è possibile indagare here, ma se si vuole utilizzare un vecchio GDI + API un modo per farlo è quello di creare Winform disegnare lì e ospitare in WPF
Senza usare WinForms c'è un modo per usare il disegno GDI + usando la classe System :: Drawing :: Graphics? – Sreenath
Puoi scrivere interop nativo usando dllimport su GDI + –
Anche http://stackoverflow.com/questions/271686/c-transition-between-gdi-and-wpf questo post può aiutare –
Questo è generalmente una cattiva idea. WPF è un'API completamente nuova e il mixaggio in GDI + può comportare prestazioni scadenti, perdite di memoria e altre cose indesiderate.
Questa risposta non è ovviamente basata su alcuna esperienza reale con quelle tecnologie. –
Ci sono diversi modi per farlo, il più semplice sarebbe bloccare la tua Bitmap manipolata con GDI, ottenere il buffer di pixel (Scan0 IntPtr nel BitmapData che ottieni dal lucchetto). CopyMemory(...) dal buffer dei pixel a WriteableBitmap.BackBuffer.
Ci sono modi più performanti in WPF, come usare InteropBitmap invece di WriteableBitmap. Ma questo ha bisogno di più p/invocare.
@Jeremiah La soluzione di Morrill è ciò che faresti al centro. Tuttavia, Microsoft è stata abbastanza gentile da fornire alcuni metodi di interoperabilità:
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();
Qual è lo spazio dei nomi 'Gdi'? Sembra che tu abbia aliasato 'System.Drawing' in' Gdi (cioè usando Gdi = System.Drawing) '- puoi confermare? –
Aliasing System.Drawing to Gdi in questo esempio è una pessima idea poiché non si può semplicemente copiare e incollare il codice e aggiunge anche più confusione per i lettori. – CyberFox
- 1. Disegno di molti rettangoli in GDI +
- 2. Prestazioni di disegno 2D (GDI + vs SlimDX)
- 3. Disegno Rettangolo blu leggermente trasparente in Nativo Win32 GDI
- 4. Interlinea GDI in Delphi?
- 5. Come sfumare il colore (colorare secondo il valore alfa specificato) l'area di disegno usando puro GDI?
- 6. Disegno di linee 3D in WPF
- 7. Winforms/GDI + Curva di disegno per un grafico
- 8. Posso ottenere HDC dalla finestra WPF in modo che possa disegnare con l'API Gdi +?
- 9. Disegno di una stringa che segue un percorso utilizzando GDI +
- 10. Come ruotare il testo in GDI +?
- 11. System.Drawing (GDI +) vs System.Windows.Media (WPF) vs Direct2D + DirectWrite + WIC
- 12. come riempire il gradiente per roundrect in puro gdi (non gdi +)
- 13. Cosa fa il thread in background GDI +?
- 14. Disegno di alberi genealogici con WPF
- 15. Come utilizzare un ContextMenu UserControl in WPF?
- 16. Come posso utilizzare RelayCommand in wpf?
- 17. Come utilizzare DateTimePicker obbligatorio in WPF
- 18. Come ruotare Bitmap in Windows GDI?
- 19. GDI + Come modificare Line SmoothingMode?
- 20. Come utilizzare IDataErrorInfo.Error in un programma WPF?
- 21. Come utilizzare i controlli personalizzati in WPF
- 22. Utilizzare DataContext come CommandParameter in WPF
- 23. GDI + doppio buffering in C++
- 24. Come applicare un effetto ombra discendente durante il disegno su un DrawingContext in WPF?
- 25. C'è un modo per modificare l'ordine di disegno in WPF
- 26. "Si è verificato un errore generico in GDI +" durante il tentativo di utilizzare Image.Save
- 27. WPF Qual è il modo corretto di utilizzare i file SVG come icone in WPF
- 28. C# GDI Algoritmo di rilevamento degli spazi bianchi GDI
- 29. Prestazioni di disegno WPF con un numero elevato di geometrie
- 30. Qual è la differenza tra GDI e GDI +?
motivi per cui? mi piacerebbe conoscere la performance – moogs
. GDI è molto più veloce di WPF nel disegnare un grande numero di linee, forme –