Как обменять D3DImage между приложением WPF и Windows (для копирования/вставки)?

Я работаю над выполнением операций копирования и вставки в своем приложении для построения диаграмм. Поэтому мне нужно...

  • Преобразуйте растровое изображение WPF в D3DImage (для последующей реализации «Копировать») и

  • Преобразуйте D3DImage в растровое изображение WPF (для последующей реализации «Вставить»).

Обратите внимание, что для этого требуется «Взаимодействие» между приложением WPF и собственной Win-32.

Как это сделать, как можно короче (две функции в идеале)?


person Néstor Sánchez A.    schedule 06.05.2011    source источник
comment
Это родное приложение тоже твое? (Можете ли вы изменить его?)   -  person Danny Varod    schedule 13.05.2011


Ответы (2)


Вы, вероятно, нашли свой ответ за последние полгода, но вот как преобразовать D3DImage в WPF в BitmapSource (в этом случае я использовал vb.net):

Public Function GetCurrentImage() As BitmapSource

        Dim width As Integer = D3DImage.PixelWidth
        Dim height As Integer = D3DImage.PixelHeight

        Dim dv As New DrawingVisual()
        Using dc As DrawingContext = dv.RenderOpen()
            dc.DrawImage(D3DImage, New Rect(0, 0, width, height))
        End Using

        Dim rtb As New RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32)
        rtb.Render(dv)

        Return BitmapFrame.Create(rtb)
    End Function

Вы можете найти его на C# в WPFMediaKit.

person Gabe Miller    schedule 21.10.2011
comment
Да, мне потребовалось очень много попыток/ошибок со многими преобразованиями, чтобы получить функциональность, и до сих пор мне приходится снова тестировать необычные варианты формата (например, разные dpi). Спасибо. - person Néstor Sánchez A.; 22.10.2011

Что вы подразумеваете под D3DImage?

В WPF есть элемент управления/поверхность с именем D3DImage, но создается впечатление, что вы имеете в виду формат растрового изображения. Вы пытаетесь поместить данные в буфер обмена? Если это так, вам не понадобится взаимодействие. Просто используйте API буфера обмена, чтобы поместить изображение в буфер обмена и прочитать его из буфера обмена.

person Emond Erno    schedule 10.05.2011
comment
D3DImage — это тип внешнего (не WPF, поэтому Win-32) изображения, предназначенного для вставки (с помощью Clipboard.GetImage() после копирования, скажем, из Paint.NET), но которое я не могу преобразовать в действительный WPF BitmapImage (это вместо этого показывает черный прямоугольник). Документация MSDN: msdn.microsoft.com/en -нас/библиотека/ - person Néstor Sánchez A.; 11.05.2011
comment
Вы копируете в правильный буфер? Можете ли вы показать нам код? - person Emond Erno; 11.05.2011