В GDI + произошла общая ошибка при закрытии потока памяти или использовании 'using' с потоком памяти - PullRequest
0 голосов
/ 19 ноября 2009

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

using(MemoryStream memoryStream = new MemoryStream())
  {
    ImageCodecInfo imageEncoder = GetEncoderInfo("image/jpeg");
    EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality);
    EncoderParameters encodeParams = new EncoderParameters(1);
    encodeParams.Param[0] = qualityParam;

    using (Bitmap bitmapImage = new Bitmap(image, width, height))
    {
        bitmapImage.SetResolution(dpi, dpi);
        bitmapImage.Save(memoryStream, imageEncoder, encodeParams);
    }

    Image compressedImage = new Bitmap(memoryStream);
  }
  _compressedImage.Save("C:\\test.jpg");

1 Ответ

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

GDI + не всегда загружает изображение в память, но откладывает эту операцию (то же самое происходит, когда вы создаете изображения из ручек, таких как значки). Если вы хотите убедиться, что растровое изображение хранится в памяти, создайте растровое изображение и нарисуйте другое на новом растровом изображении.

К сожалению, это плохо документировано, и я сталкивался с такими проблемами раньше. Внутренне это вызов GdipCreateBitmapFromStream в плоском API GDI +.

Вот заявление MS (сообщение для группы новостей Джона Хорника).

...