C # – вывод изображения в выходной stream ответа, дающий ошибку GDI +

При выводе изображения в выходной stream требуется ли временное хранилище? Я получаю «общую ошибку GDI +», которая обычно связана с ошибкой разрешения папки при сохранении изображения в файл.

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

using (Bitmap image = new Bitmap(context.Server.MapPath("images/stars_5.png"))) { image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png); } 

Все работает отлично на моей локальной машине под управлением Windows 7 с IIS 7.5 и ASP.NET 2.0. Проблема возникает на сервере QA, который работает под управлением Windows Server 2003 с IIS 6 и ASP.NET 2.0.

Строка, указывающая на ошибку:

 image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png); 

Вот трассировка стека:

 [ExternalException (0x80004005): A generic error occurred in GDI+.] System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) +378002 System.Drawing.Image.Save(Stream stream, ImageFormat format) +36 GetRating.ProcessRequest(HttpContext context) in d:\inetpub\wwwroot\SymInfoQA\Apps\tools\Rating\GetRating.ashx:54 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

PNG (и другие форматы) необходимо сохранить в stream с возможностью поиска. Использование промежуточного MemoryStream сделает трюк:

 using (Bitmap image = new Bitmap(context.Server.MapPath("images/stars_5.png"))) { using(MemoryStream ms = new MemoryStream()) { image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); ms.WriteTo(context.Response.OutputStream); } } 

Я бы добавил:

 Response.ContentType = "image/png"; 

Поэтому его можно просмотреть непосредственно в браузере, если он не находится в теге img .

  • Image.Save (..) генерирует исключение GDI +, поскольку stream памяти закрыт
  • Рисование прозрачной кнопки
  • Как определить, принадлежит ли точка определенной строке?
  • Параллелирование GDI + изменение размера .net
  • Использование матрицы для поочередного поворота прямоугольников
  • Нарисуйте несколько рисунков полилинии или кривых свободной руки - добавление функции отмены
  • Можете ли вы сделать альфа-прозрачный PNG с C #?
  • Что-нибудь (кроме GDI ++) для улучшения рендеринга шрифтов в Windows?
  • Скрытие нежелательных свойств в пользовательских элементах управления
  • Общая ошибка произошла в GDI +, JPEG-изображении в MemoryStream
  • Как загрузить PNG-образ с помощью Win32 / GDI (если нет GDI +)?
  • Давайте будем гением компьютера.