«Произошла общая ошибка в GDI +» при сохранении - PullRequest
0 голосов
/ 02 ноября 2009

Я пытаюсь «восстановить» изображение и получаю сообщение об ошибке «Произошла общая ошибка в GDI +». Я немного обыскал эту ошибку, но пока не нашел решения! В большинстве предложений упоминается:

  • Проверка того, что поток не используется или заблокирован (т. Е. Файловые потоки)
  • Убедитесь, что поток не используется в течение всего времени жизни объекта (не должно быть так, как вы увидите ниже)
  • Попытка воспроизвести объект в растровом объекте и использовать его для сохранения (у меня не получилось)

Код, который я использую, указан ниже:

using (Stream @imageStream = ResourceManager.CreateFile(finalResourceId, imageFileName))
{
    using (MemoryStream ms = new MemoryStream(imageFile.ResourceObject))
    {
        using (Image img = Image.FromStream(ms))
        {
            imageWidth = img.Width;
            imageHeight = img.Height;
            img.Save(@imageStream, img.RawFormat);
        }
     }
 }

В приведенном выше коде ResourceManager.CreateFile возвращает эквивалент MemoryStream, поэтому не должно быть никаких "проблем с ресурсами".

Я не думаю, что кто-то еще сталкивался с этой проблемой и может поделиться своим решением? Заранее спасибо за помощь!

1 Ответ

1 голос
/ 02 ноября 2009

Спасибо за @Scozzard за подсказку об обходном пути!

int imageWidth, imageHeight;
using (Stream imageStream = ResourceManager.CreateFile(finalResourceId, imageFileName))
{
    using (Image img = Image.FromStream(new MemoryStream(imageFile.ResourceObject)))
    {
        imageWidth = img.Width;
        imageHeight = img.Height;
    }
    imageStream.Write(imageFile.ResourceObject, 0, imageFile.ResourceObject.Length);
}

Поскольку я работаю полностью в памяти, мне не нужно использовать объект изображения для его повторного сохранения в том же формате - я могу просто скопировать буфер байтов в новый поток.

Спасибо за ваши комментарии, тем не менее!

...