Произошла общая ошибка в GDI + при сохранении растрового изображения в MemoryStream

У меня есть код, который отлично работает на нескольких машинах (разработка, QA, UAT). К сожалению, на производстве я получаю сообщение «Произошла общая ошибка в GDI +» на bmp.Save(ms, ImageFormat.Png);. В результате я предполагаю, что вы не сможете воспроизвести проблему, но, возможно, кто-то может заметить мою ошибку.

В нескольких заметках, я много раз искал общие решения, отметим, что это сохранение в MemoryStream, поэтому проблемы с разрешениями файлов, которые большинство людей предлагают, не применяются, а также «bmp заблокирован, пока открыт». Решение, потому что снова я пишу в другом месте. Наконец, это не потому, что png требует доступного для поиска потока, потому что MemoryStream является доступным для поиска.

Обратите внимание, если я изменю его на ImageFormat.Jpeg, он будет работать нормально. У меня проблема только с PNG. Я обнаружил упоминание о ключе реестра HKEY_CLASSES_ROOT\CLSID\{FAE3D380-FEA4-4623-8C75-C6B61110B681}, который может быть проблемой из-за разрешений. В результате я установил ключ, чтобы позволить Everyone иметь доступ для чтения к этому ключу, без изменений.

public static MemoryStream GenerateImage(string text)
{
    MemoryStream ms = new MemoryStream();
    using (Bitmap bmp = new Bitmap(400,400))
    {
        bmp.Save(ms, ImageFormat.Png);
        ms.Position = 0;
    }
    return ms;
}

Вот полная трассировка стека:

[ExternalException (0x80004005): общая ошибка произошла в GDI +.]
System.Drawing.Image.Save ( Поток потока, кодер ImageCodecInfo, EncoderParameters encoderParams) +616457
WP.Tools.Img.GenerateImage (текст строки) +383

Примечание: мой вопрос уже перечисляет решения в предлагаемом дублировать. Ни одна проблема. Если бы это было так, это бы не сработало и для JPEG.

10
задан dmeglio 6 December 2015 в 18:52
поделиться