У меня есть код, который отлично работает на нескольких машинах (разработка, QA, UAT). К сожалению, на производстве я получаю "Общая ошибка в GDI +" на bmp.Save(ms, ImageFormat.Png);
. В результате я предполагаю, что вы не сможете воспроизвести проблему, но, возможно, кто-то может обнаружить мою ошибку.
Несколько заметок, я много искал для общих решений, обратите внимание, что это сохраняется в MemoryStream
, поэтому проблемы с правами на доступ к файлам, которые большинство людей предлагают, не применяются, а также не блокируется "bmp while open", потому что снова я пишу где-то еще. Наконец, это не потому, что для 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(String текст) +383
Примечание: мой вопрос уже перечисляет решения в предлагаемом дубликате. Ничего не стоит. Если бы они были, это не удавалось бы для JPEG.