Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WPF应用程序和Windows之间交换D3DImage(用于复制/粘贴)?_Wpf_Interop_Bitmap_Direct3d - Fatal编程技术网

如何在WPF应用程序和Windows之间交换D3DImage(用于复制/粘贴)?

如何在WPF应用程序和Windows之间交换D3DImage(用于复制/粘贴)?,wpf,interop,bitmap,direct3d,Wpf,Interop,Bitmap,Direct3d,我正在我的绘图应用程序上进行复制和粘贴操作。 因此,我需要 将WPF位图转换为D3DImage(以便以后实现“复制”),以及 将D3DImage转换为WPF位图(用于以后实现“粘贴”) 请注意,这需要WPF应用程序和本机Win-32之间的“互操作” 如何做到这一点,尽可能短(理想情况下有两个功能)?你所说的D3D图像是什么意思 WPF中有一个名为D3DImage的“Control”/Surface,但感觉好像是指位图格式。您正在尝试将数据放在剪贴板上吗?如果是这样,您将不需要互操作。只需使用

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

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

  • 将D3DImage转换为WPF位图(用于以后实现“粘贴”)

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


如何做到这一点,尽可能短(理想情况下有两个功能)?

你所说的D3D图像是什么意思


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

D3DImage是什么意思


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

您可能在过去半年中找到了答案,但以下是如何将WPF中的D3DImage转换为BitmapSource(在本例中我使用了vb.net):


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

你可能在过去的半年里找到了答案,但下面是如何将WPF中的D3DImage转换为位图源代码(在本例中我使用了vb.net):


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

D3DImage是一种外部(非WPF,因此是一个Win-32)图像,打算粘贴(从Paint.NET复制后使用Clipboard.GetImage()),但我无法转换为有效的WPF位图图像(它显示一个黑色矩形)。MSDN文档是:您是否正在复制到正确的缓冲区?你能给我们看一些代码吗?D3DImage是一种外部(非WPF,因此是一个Win-32)图像,打算粘贴(从Paint.NET复制后使用Clipboard.GetImage()),但我无法转换为有效的WPF位图图像(它显示一个黑色矩形)。MSDN文档是:您是否正在复制到正确的缓冲区?你能给我们看一些代码吗?那个本地应用程序也是你的吗?(你能修改它吗?)?(你能修改它吗?)是的,我花了很多次转换尝试/错误来获得功能,但现在我必须再次测试不常见的格式变量(例如不同的dpi)。谢谢。是的,我花了很多次转换来获得功能,但现在我必须再次测试不常见的格式变量(例如不同的dpi)。谢谢
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