我想在WPF控件中使用GDI +绘图。
答案 0 :(得分:9)
有几种方法可以做到这一点,最简单的方法是锁定你用GDI操纵的Bitmap,得到像素缓冲区(你从锁中得到的BitmapData中的Scan0 IntPtr)。从像素缓冲区到CopyMemory(...)的WriteableBitmap.BackBuffer。
WPF中有更多高效的方法,比如使用InteropBitmap而不是WriteableBitmap。但这需要更多的p / invoke。
答案 1 :(得分:2)
尝试在WPF项目中合成Windows窗体用户控件并在其中封装GDI +绘图。 见Walkthrough: Hosting a Windows Forms User Control by Using the WPF Designer
答案 2 :(得分:2)
WPF附带了新的图形功能,您可以对其进行调查here,但是如果您想使用旧的GDI + API,一种方法是在那里创建Winform并将其托管到WPF中
答案 3 :(得分:1)
@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();
答案 4 :(得分:-4)
这通常是一个坏主意。 WPF是一个全新的API,混合使用GDI +可能会导致性能不佳,内存泄漏和其他不良内容。