Я полагаю, ваш ответ здесь .Вкратце:
вывод заключается в том, что если вы работаете с буфером обмена в WPF и получаете исключения System.OutOfMemoryException, которые, кажется, не имеют никакого смысла, то вы, вероятно, забыли добавить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)