2013-03-21 2 views
1

나는이 메시지 수단 (관리되지 않는 리소스를 폐기 할 필요가) 무엇을 이해하지만 내 경우에 발생하는 이유를 정말 이해가 안 :이 경우일반 오류는 GDI에서 발생 + 다시

System.Drawing.Image imgAnimaha, imgNoanimaha; 
       using (System.IO.Stream file = thisExe.GetManifestResourceStream("WindowsApplication1.img.noanimaha135.gif")) 
       { 

        using (System.Drawing.Image img = Image.FromStream(file)) 
        { 
         imgNoanimaha = (System.Drawing.Image)img.Clone(); 
        } 
       } 

       using (System.IO.Stream file = thisExe.GetManifestResourceStream("WindowsApplication1.img.animaha135.gif")) 
       { 

        using (System.Drawing.Image img = Image.FromStream(file)) 
        { 
         imgAnimaha = (System.Drawing.Image)img.Clone(); 
        } 
       } 

      pbDiscovery.Image = imgAnimaha; 

나는 "GDI +에서 일반적인 오류가 발생했습니다"왜 그리고 어떻게 해결할 수 있습니까? PS. 다음 글을 쓰면 :

  pbDiscovery.Image = imgNoanimaha; 

올바르게 작동합니다.

using (System.Drawing.Image img = Image.FromStream(file)) 
{ 
    imgAnimaha = (System.Drawing.Image)img.Clone(); 
} 

... 깊은을 생성하지 않습니다

+0

다른 비트 맵으로 시도해 보셨습니까? –

답변

3

문제는 Image.Clone(),로이다 ... 난 정말 어디 이해하지 않고 관리되지 않는 어떤 자원이 배치되지 이미지의 사본. 모든 헤더 정보의 사본을 생성하지만 실제 픽셀 데이터는 생성하지 않습니다 (단지 원래 픽셀 데이터를 가리킴). 원본 (및 유일한) 픽셀 데이터는 사용 범위를 벗어나면 원본 img 객체와 함께 배치됩니다.

그래서 질문이 생기면 여기에서 사용하는 요점은 무엇입니까? 나는 아무도 없다고 제안 할 것이다. 이미지를 System.Drawing.Image 객체로 읽어 들인 다음 픽셀 데이터가 필요하면 (예 : 이미지를 다시 그려야하는 경우) 활성 상태를 유지하고 다시 표시 할 필요가 없으면 폐기합니다.

+0

문제는 이미지로드 코드가 원본 파일에 잠금을 유지하는 것입니다. 기본 파일이나 스트림이 닫힌 상태에서 복제 한 순간부터 오류가 발생합니다. – Nyerguds