C# wpf InteropBitmap到位图
我有一个奇怪的问题。我正在尝试检索webbrowser控件中已加载的图像。以下代码在WinForms应用程序中运行良好: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)
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一起使用的位图类型:aBitmapSource
。这是可以与WPF控件(如Image
)一起使用的。那么,回到你的问题:
- 如果您使用的是WPF4,您可以使用剪贴板.GetImage
,它返回一个位图源代码,这正是您所需要的
如果您正在使用其他任何东西,您可以使用Thomas Levesque描述的技术
总之:
- 对于WinForms:WinForms剪贴板=>WinForms位图
- 对于WPF:WPF剪贴板=>WPF位图