У меня есть код, который отлично работает на нескольких машинах (разработка, 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.