Mil*_*nki 3 .net c# browser wpf winforms
我有一个奇怪的问题。我正在尝试检索已在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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果我在WPF应用程序中使用相同的代码,则会在
using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().......
Run Code Online (Sandbox Code Playgroud)
错误如下:
“无法将类型为'System.Windows.Interop.InteropBitmap'的对象转换为类型为'System.Drawing.Bitmap'。”
我该如何解决?
请任何人都可以提供任何指导。
先感谢您。
您遇到的问题是有两个不同的Clipboard类,一个用于WinForms,一个用于WPF。WinForms会返回适合与WinForms一起使用的位图,即System.Drawing.Bitmap,您正在使用的代码将其复制到System.Drawing.Image。
这些类型的位图在WPF中不起作用,因此,不能将Clipboard类的WPF版本转换为WinForms有用的类型这一事实是预料之中的,但这并不是您的问题。
您的问题是,对于WPF,您需要一种可以与WPF一起使用的位图类型:a BitmapSource。您可以将WPF控件与一起使用Image。所以,回到您的问题:
Clipboard.GetImage它返回一个BitmapSource,正是您所需要的综上所述: