2013-02-21 3 views
0

올바르게 메모리 누수가 없도록 비트 맵을 처리하는 방법을 알아야합니다. 나는 BackgroundWorker에 비디오를 잡아와 같은의 PictureBox에 할당하고있다 :백그라운드 스레드에서 사용되는 비트 맵 처리

private void bwVideo_ReadCamera(object sender, DoWorkEventArgs e) 
{ 
    Bitmap temp = null; 
    while (true) 
    { 
    Image<Bgr, Byte> frame = logitec.QueryFrame(); 
    if (temp != null) 
     temp.Dispose(); 
    temp = frame.ToBitmap(); 
    pictureBox2.Image = temp; 
    } 
} 

문제는 내가 아직이 코드의 "메모리 예외 부족"얻을 것입니다. BackgroundWorker ReportProgress를 사용하고 위 코드에서 dispose가 끝나기를 기다리면서 pictureBox2.Image 변수를 해제하려고했습니다. 사용자가 PictureBox 이미지에서 dispose를 호출하기 위해 gui와 동기화해야합니다. 또한 이미지와 비트 맵간에 데이터를 공유하는 Image 클래스의 "Bitmap"속성을 사용하려고했습니다.

내 질문에이 상황에서 내 이미지를 처분하는 적절한 방법은 무엇입니까?

+0

메모리 부족 예외는 어디에서 발생합니까? – DiskJunky

+0

프레임이 선언 된 위치는 어디입니까? 프레임 유형은 무엇입니까? 프레임을 처분해야합니까? – mbeckish

+0

죄송합니다. 프레임 선언이 표시됩니다. 메모리 부족 예외가 프레임에 throw됩니다. ToBitmap(); – user912447

답변

0

Image<Bgr, Byte> 선언에는 using 문이 있어야합니다. the documentation을 참조하십시오.

+0

완벽합니다. 내 코드는 실제로 내가 게시 한 스 니펫보다 복잡하기 때문에 PictureBox에 할당 한 후에 단순히 Image.Dispose() 메서드를 호출했습니다. 나는 과제가 데이터를 복사한다는 것을 깨달았어야 했으므로 Bitmap을 릴리즈하는 것이 좋습니다. – user912447

관련 문제