2009-11-19 4 views
0

GDI +에서 일반 오류가 발생했습니다. 메모리 스트림에 'using'문을 사용하고 있기 때문에 예외가 발생합니다. 즉, 끝에 배치됩니다. 그리고 이미지를 저장하려고하면 예외가 throw됩니다.메모리 스트림을 닫거나 "using"using memory stream

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

GDI +는 항상 이미지를 메모리에로드하지는 않지만이 작업을 연기합니다 (아이콘과 같은 핸들로 이미지를 만들 때도 마찬가지입니다). 비트 맵이 메모리에 유지되는지 확인하려면 비트 맵을 만들고 새 비트 맵에 다른 비트 맵을 그립니다.

불행히도, 이것은 잘 설명되어 있지 않으며, 이전에 그러한 문제로 어려움을 겪어 왔습니다. 내부적으로 플랫 GDI + API의 GdipCreateBitmapFromStream에 대한 호출입니다.

Here is a statement from MS (newsgroup post by John Hornick).