【问题标题】:How to interchange D3DImage between a WPF application and Windows (for Copy/Paste)?如何在 WPF 应用程序和 Windows 之间交换 D3DImage(用于复制/粘贴)?
【发布时间】:2011-05-06 06:14:03
【问题描述】:

我正在对我的图表应用程序进行复制和粘贴操作。 因此,我需要...

  • 将 WPF 位图转换为 D3DImage(用于稍后实现“复制”),以及

  • 将 D3DImage 转换为 WPF 位图(以便稍后实现“粘贴”)。

请注意,这需要 WPF 应用程序和本机 Win-32 之间的“互操作”。

如何做到这一点,尽可能短(最好是两个函数)?

【问题讨论】:

  • 那个原生应用也是你的吗? (可以修改吗?)

标签: wpf interop bitmap direct3d


【解决方案1】:

您可能在过去半年找到了答案,但这里是如何将 WPF 中的 D3DImage 转换为 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

您可以在 WPFMediaKit 的 C# 中找到它。

【讨论】:

  • 是的,我花了很多次尝试/错误来获得功能,但现在我必须再次测试不常见的格式变量(例如不同的 dpi)。谢谢。
【解决方案2】:

D3DImage 是什么意思?

WPF 中有一个名为 D3DImage 的“控件”/Surface,但感觉好像您指的是位图格式。您是否尝试将数据放在剪贴板上?如果是这样,您将不需要互操作。只需使用剪贴板 API 将图像放在剪贴板上并从剪贴板中读取即可。

【讨论】:

  • D3DImage 是用于粘贴的外部(非 WPF,因此是 Win-32)图像的类型(在从 Paint.NET 复制后使用 Clipboard.GetImage()),但我不能转换为有效的 WPF BitmapImage(它显示一个黑色矩形)。 MSDN 文档是:msdn.microsoft.com/en-us/library/…
  • 您是否正在复制到正确的缓冲区?你能给我们看一些代码吗?
猜你喜欢
  • 2020-05-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多