You are viewing alexey_rom

Документация .Net

Странное у Microsoft понимание о нехватке памяти: If the file does not have a valid image format or if GDI+ does not support the pixel format of the file, this method throws an OutOfMemoryException exception.
Tags:

Comments

Да, бывает :)
И так у них всё :)
Нет, это всё-таки исключение, к счастью :)
Это исключение ещё из GDI+ тянется, .NET тут же не причём :)
А

catch(OutOfMemoryException e) {
throw new InvalidImageFormatException(e);
}

добавить в код метода никак нельзя? :)
Как отличить настоящую причину произошедшего исключения, может действительно памяти не хватает? И потом, не совсем понятно, а зачем вообще это делать. в GDI+ сделали так, а методы из пространства System.Drawing являются лишь их обёртками, они не должны влиять на саму логику, а должны служить лишь проводником.
> Как отличить настоящую причину произошедшего исключения, может действительно памяти не хватает?

Да, это действительно проблема.

> И потом, не совсем понятно, а зачем вообще это делать. в GDI+ сделали так

А тут возникает вопрос, почему так сделали в GDI+...
Да, хорошо: "Sadly, don't know how that happened, an image file format problem is reported by the same error code" :) Действительно, лучше уж было бы GenericError или UnknownImageFormat. А то, что сейчас уже поздно исправлять -- понятно...
Да смысла нет. На WPF рано или поздно все перейдут, там DirectX для отрисовки используются, а не GDI+.
С днем рождения!
Спасибо!
Есть подозрение, что проблема в следующем:
Если файл битый, то в заголовке будет мусор, в том числе и в полях, отвечающих за размеры каких-нибудь аллоцируемых ресурсов. Соответственно, при попытке аллоцировать эти ресурсы и вылетит исключение о нехватке памяти.

Т.е., по-видимому, им было лень отдельно копаться с контролем целостности файла, тем более, что можно умышленно сконструировать корректный файл, требующий при обработке огромное количество памяти (помнится, такой фокус делали с архивами).
Ну, может быть.