После нескольких дней отслеживания причудливых GDI+ ошибок я наткнулся на эту маленькую жемчужину в MSDN:
Классы в пространстве имен System.Drawing не поддерживаются для использования в службе Windows или ASP.NET. Попытка использовать эти классы из одного из этих типов приложений может привести к непредвиденным проблемам, таким как снижение производительности службы и исключения во время выполнения.
Я не знаю, означает ли "служба ASP.NET" "веб-приложение" в этом контексте, но "пониженная производительность службы" наверняка охватывает случайный ассортимент: "Общая ошибка произошла в GDI+" и "Недостаточно памяти". "ошибки, которые выбрасывает мое приложение - непостоянные, невоспроизводимые ошибки чтения и записи изображений JPEG, которые - во многих случаях - фактически были созданы System.Drawing.Imaging.
Итак, если GDI+ не может надежно читать и записывать файлы JPEG в веб-приложении, что я должен использовать вместо этого?
Я хочу, чтобы пользователи могли загружать изображения (требуется JPEG, другие форматы, которые есть в наличии), надежно пересматривать их и отображать полезные сообщения об ошибках, если что-то пойдет не так. Есть идеи? Стоит ли рассматривать пространства имен System.Media из WPF?
РЕДАКТИРОВАТЬ: Да, я знаю, GDI+ работает "большую часть времени". Этого недостаточно, потому что, когда он терпит неудачу, он делает это таким образом, что его невозможно изолировать или восстановить изящно. Меня не интересуют примеры кода GDI+, который работает для вас: я ищу альтернативные библиотеки для обработки изображений.