如何使用GDI +绘制在WPF?(How to use the GDI+ drawing in WP

2019-08-31 08:33发布

我想使用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?