System.Drawing.Image 관련 문제해결

예외 정보

예외 정보: System.Runtime.InteropServices.ExternalException: GDI+에서 일반 오류가 발생했습니다.
스택 추적:
[System.Runtime.InteropServices.ExternalException: GDI+에서 일반 오류가 발생했습니다.]
   위치: System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
   위치: System.Drawing.Image.Save(Stream stream, ImageFormat format)
   위치: Sample.CO01001M.Save()
   위치: Sample.CO01001M.btnSave_Click(Object sender, EventArgs e)

관련 코드

private void FunctionDoSomething(){   
  ...
  DataRowView rv = 데이터로뷰;
  if (rv == null) return;

  if (rv.Row["이미지컬럼"] != null && rv.Row["이미지컬럼"] != DBNull.Value)
  {
      //MessageBox.Show(rv.Row["이미지컬럼"].GetType().ToString());
      byte[] buffer = rv.Row["이미지컬럼"] as byte[];
      System.IO.MemoryStream mStream = new System.IO.MemoryStream(buffer);
      mStream.Flush();
      Image tImage = Image.FromStream((System.IO.Stream)mStream, true, true);

      this.pic픽쳐박스Control.Image = tImage;
      mStream.Close(); // 이부분 때문에 오류발생
  }    
}

private void FunctionDoSomethingTwo(){
  System.IO.MemoryStream mStream = new System.IO.MemoryStream();
  byte[] buffer = null;
  Image img = this.pic픽쳐박스Control.Image as Image;

  if (img != null)
  {
      img.Save(mStream, img.RawFormat); // 여기서 오류발생
      buffer = mStream.ToArray();
  }
  mStream.Close();
}

해결 방법

FunctionDoSomething() 를 호출하여 pic픽쳐박스Control에 이미지를 설정하고, FunctionDoSomethingTwo() 를 호출하여 pic픽쳐박스Control 의 이미지로 부터 Image 객체의 byte[]을 생성할때 오류 발생가 발생합니다.

FunctionDoSomething() 에서 pic픽쳐박스Control 에 이미지를 설정한 후 Stream 객체를 닫지 않아야 합니다.

관련 자료

이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.

This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.

“System.Drawing.Image 관련 문제해결”에 대한 한개의 댓글

  1. 핑백: bbon's me2DAY

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다