1 回答

TA贡献1876条经验 获得超6个赞
我相信你的答案就在这里。简而言之:
结论是,如果您在 WPF 中使用剪贴板,并且您得到的 System.OutOfMemoryExceptions 似乎没有任何意义,那么您可能忘记将 SerializableAttribute 添加到您放置在剪贴板上的任何类中。
那么这个医疗应用程序是您的应用程序吗?因为看起来问题在于如何将图像放入剪贴板,而不是如何检索图像。
更新:由于这不是您的应用程序,那么您可能不得不忍受他们的错误(或 中的错误Clipboard.GetData())。的源代码Clipboard.GetImage()是这样的:
public static Image GetImage() {
var dataObject = Clipboard.GetDataObject();
if (dataObject != null) {
return dataObject.GetData(DataFormats.Bitmap, true) as Image;
}
return null;
}
请注意,您的堆栈跟踪表明异常发生在GetData(). 查看源代码,这意味着调用GetDataObject()有效,这意味着您可以(理论上)使用GetDataObject()自己并将其转换IDataObject为您可以使用的东西。
可能需要一些探索才能弄清楚发生了什么。您可能可以IDataObject.GetFormats()用来检查它是什么,然后IDataObject.GetData()用来获取该格式的数据。
更新 2:此处的解决方案为我们指明了正确的方向,但需要进行一些修改:
var data = Clipboard.GetDataObject();
var ms = (MemoryStream) data.GetData("PNG+Office Art");
var image = Image.FromStream(ms)
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报