Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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
C# wpf InteropBitmap到位图_C#_.net_Wpf_Winforms_Browser - Fatal编程技术网

C# wpf InteropBitmap到位图

C# wpf InteropBitmap到位图,c#,.net,wpf,winforms,browser,C#,.net,Wpf,Winforms,Browser,我有一个奇怪的问题。我正在尝试检索webbrowser控件中已加载的图像。以下代码在WinForms应用程序中运行良好: IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)__ie.NativeDocument.BODY).createControlRange(); foreach (IHTMLImgElement img in __ie.NativeDocument.Images)

我有一个奇怪的问题。我正在尝试检索webbrowser控件中已加载的图像。以下代码在WinForms应用程序中运行良好:

IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)__ie.NativeDocument.BODY).createControlRange();

            foreach (IHTMLImgElement img in __ie.NativeDocument.Images)
            {
                imgRange.add((IHTMLControlElement)img);
                imgRange.execCommand("Copy", false, null);

                System.IO.MemoryStream stream = new System.IO.MemoryStream();
                using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
                {
                        bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
                        var image = System.Drawing.Image.FromStream(stream);
                }
            }
但如果我在WPF应用程序中使用相同的代码,则在

using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().......
错误如下:

“无法将“System.Windows.Interop.InteropBitmap”类型的对象强制转换为“System.Drawing.Bitmap”类型。”

我如何解决这个问题

请任何人提供任何指导


提前谢谢。

您遇到的问题是有两个不同的
剪贴板类,一个用于WinForms,另一个用于
WPF
。WinForms one返回适合与WinForms一起使用的位图,即
System.Drawing.Bitmap
,您正在使用的代码中将其复制到
System.Drawing.Image

这些类型的位图对WPF不有用,因此无法将
Clipboard
类的WPF版本提供给您的内容转换为对WinForms有用的类型这一事实是意料之中的,而不是您真正的问题

您的问题是,对于WPF,您需要一种可以与WPF一起使用的位图类型:a
BitmapSource
。这是可以与WPF控件(如
Image
)一起使用的。那么,回到你的问题:

  • 如果您使用的是WPF4,您可以使用剪贴板.GetImage
,它返回一个
位图源代码,这正是您所需要的
  • 如果您正在使用其他任何东西,您可以使用Thomas Levesque描述的技术
  • 总之:

    • 对于WinForms:WinForms剪贴板=>WinForms位图
    • 对于WPF:WPF剪贴板=>WPF位图