我想在我的WPF控件中使用GDI +繪圖。如何在WPF中使用GDI +繪圖?
回答
嘗試在WPF項目中合成Windows窗體用戶控件並在其中封裝GDI +繪圖。 見Walkthrough: Hosting a Windows Forms User Control by Using the WPF Designer
不使用WinForms是否有任何使用System :: Drawing :: Graphics類來使用GDI +繪圖的方法? – Sreenath 2009-10-22 06:34:24
WPF配備了新的圖形功能,您可以調查它here,但如果你想使用舊的GDI + API做的一個方法是創建WinForm的畫有和主機成WPF
如果不使用WinForms,有什麼辦法可以使用System :: Drawing :: Graphics類來使用GDI +繪圖? – Sreenath 2009-10-22 06:35:05
你可以使用dllimport編寫原生互操作到GDI + – 2009-10-22 07:49:25
同時http://stackoverflow.com/questions/271686/c-transition-between-gdi-and-wpf這篇文章可以幫助 – 2009-10-22 08:05:57
這通常是一個糟糕的主意。 WPF是一個全新的API,並且在GDI +中混合可能會導致性能下降,內存泄漏和其他不合需要的事情。
這個答案顯然不是基於任何真實的經驗與這些技術。 – 2014-06-20 14:22:43
有幾種方法可以做到這一點,最簡單的方法是鎖定您使用GDI操作的位圖,獲取像素緩衝區(Scan0 IntPtr位於從鎖中獲取的BitmapData中)。 CopyMemory(...)從你的像素緩衝區到WriteableBitmap.BackBuffer。
WPF中有更多的高性能方式,如使用InteropBitmap而不是WriteableBitmap。但是這需要更多的p/invoke。
@Jeremiah Morrill的解決方案就是你要做的核心。但是,微軟提供了一些互操作方法:
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();
什麼是Gdi命名空間?它看起來像你有'System.Drawing'別名'Gdi(即使用Gdi = System.Drawing)' - 你能確認嗎? – 2014-11-11 14:01:29
別名系統。在這個例子中繪製到Gdi是一個非常糟糕的主意,因爲你不能複製和粘貼代碼,它也增加了讀者的困惑。 – CyberFox 2016-05-20 02:57:49
- 1. 如何在WPF中使用GDI +?
- 2. 使用gdi + flickerfree繪圖+
- 3. 使用GDI繪圖文本+
- 4. 在GDI中繪製圖層
- 5. 在WPF應用程序中使用GDI +
- 6. 在WPF上用GDI圖形繪製圓形
- 7. 如何在使用GDI繪圖時遮擋區域+
- 8. 如何使用GDI繪製透明BMP +
- 9. 優化GDI +繪圖?
- 10. 如何在GDI +中繪製ICON?
- 11. System.Windows.Media.Imaging是否使用DirectX(如WPF)或GDI +?
- 12. 幫助GDI +圖像繪圖
- 13. 在32位和64位應用程序中使用GDi繪圖
- 14. GDI +喜歡在WPF中畫圖
- 15. 如何在WPF中繪製函數圖?
- 16. 如何使用Gdi +
- 17. 繪製到GDI +位圖
- 18. 繪製GDI +圖形對象
- 19. .NET GDI +繪圖性能
- 20. 如何在C++中使用GDI庫
- 21. 在屏幕上繪製與GDI +(或GDI)類似使用GDI +來檢查
- 22. 如何使用GDI在圓形路徑上繪製文本?
- 23. 用GDI函數繪製圖像
- 24. 如何使用GDI顯示圖片?
- 25. 如何使用GDI實現圖層?
- 26. 使用GDI +位圖
- 27. 在Compact Framework上使用GDI繪圖控件
- 28. 在DLL上使用WPF動態創建圖像(而不是GDI +)
- 29. 使用WPF在多屏幕上繪圖
- 30. 在wpf中繪製圖表
任何原因爲什麼?我很想知道 – moogs 2009-10-22 04:42:50
的表現。在繪製大量線條和形狀時,GDI比WPF快得多 – 2011-12-23 11:02:44