예외 정보
예외 정보: 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.
핑백: bbon's me2DAY