Как использовать чертеж GDI + в WPF? - PullRequest
6 голосов
/ 22 октября 2009

Я хочу использовать чертеж GDI + в своем элементе управления WPF.

Ответы [ 5 ]

9 голосов
/ 22 октября 2009

Есть несколько способов сделать это, самый простой - заблокировать ваше растровое изображение, которым вы манипулировали с помощью GDI, получить буфер пикселей (Scan0 IntPtr в BitmapData, который вы получаете из блокировки). CopyMemory (...) из вашего пиксельного буфера в WriteableBitmap.BackBuffer .

В WPF есть более эффективные способы, такие как использование InteropBitmap вместо WriteableBitmap. Но для этого нужно больше p / invoke.

2 голосов
/ 22 октября 2009

WPF поставляется с новыми графическими функциями, вы можете исследовать его здесь , но если вы хотите использовать старый GDI + API, один из способов - создать там Winform Draw и разместить его в WPF

2 голосов
/ 22 октября 2009

Попробуйте создать пользовательский элемент управления Windows Form в своем проекте WPF и инкапсулировать в нем чертеж GDI +. См. Пошаговое руководство. Размещение пользовательского элемента управления Windows Forms с помощью WPF Designer

1 голос
/ 18 октября 2011

@ Решение Джереми Моррила - это то, что вы сделали бы в основе. Однако Microsoft была достаточно хороша, чтобы предоставить некоторые методы взаимодействия:

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();
0 голосов
/ 22 октября 2009

Это вообще плохая идея. WPF - это совершенно новый API, и смешивание в GDI + может привести к снижению производительности, утечкам памяти и другим нежелательным последствиям.

...