如何解决wpf将InteropBitmap转换为位图
| 我有一个奇怪的问题。我正在尝试检索已在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 \'。\”
我该如何解决?
请任何人都可以提供任何指导。
先感谢您。
解决方法
您遇到的问题是有两个不同的
Clipboard
类,一个用于WinForms,一个用于WPF
。 WinForms将返回适合与WinForms一起使用的位图,即System.Drawing.Bitmap
,在您使用的代码中将其复制到System.Drawing.Image
。
这些类型的位图在WPF中不起作用,因此,您无法转换Clipboard
类的WPF版本将您转换为对WinForms有用的类型这一事实,这不是您的真正问题。
您的问题是,对于WPF,您需要一种可以与WPF一起使用的位图类型:“ѭ7”。这可以与WPF控件(如Image
)一起使用。所以,回到您的问题:
如果您使用的是WPF4,则可以使用Clipboard.GetImage
,它返回一个BitmapSource
,正是您所需要的
如果您正在使用其他任何方法,则可以使用此处描述的Thomas Levesque的技术
综上所述:
对于WinForms:WinForms剪贴板=> WinForms位图
对于WPF:WPF剪贴板=> WPF位图
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。