我想使用GDI +在我的WPF控件图纸。
Answer 1:
有几种方法可以做到这一点,最简单的将是锁定您的位图你GDI操作,获取像素缓冲区(SCAN0的IntPtr中的BitmapData您从锁获得)。 CopyMemory的(...)从您像素缓冲区到WriteableBitmap.BackBuffer 。
还有更高性能的方式WPF,就像使用InteropBitmap而不是WriteableBitmap的的。 但是,这需要更多的P / Invoke。
Answer 2:
尝试在WPF项目合成一个Windows窗体的用户控制和封装GDI +中它绘制。 参见演练:中承载Windows使用WPF设计窗体用户控件
Answer 3:
WPF配备了新的图形功能,您可以调查它在这里 ,但如果你想使用旧的GDI + API做的一个方法是创建WinForm的画有和主机成WPF
Answer 4:
@Jeremiah莫里尔的解决方案是你的核心做什么。 然而,微软是不够好,提供一些互操作的方法:
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();
Answer 5:
这通常是一个坏主意。 WPF是一个完全新的API和在GDI +混合可能导致较差的性能,内存泄漏和其它不希望的事情。
文章来源: How to use the GDI+ drawing in WPF?