2011-08-23 2 views
1

나는 COM 구성 요소가 있습니다. 이 COM 구성 요소는 화면에 이미지를 표시합니다. 이미지 비트는 다음과 같이 버퍼를 통해 복사되어 image이 CV는 :: 매트StretchBlt 실패

IplImage iplimage = image; 

IplImage *img2 = cvCreateImage(cvGetSize(&iplimage), 
          iplimage.depth, 
          iplimage.nChannels); 

cvCopy(&iplimage, img2); 

memcpy(m_BackSurface.vpBits, img2->imageData, img2->width*img2->height*3); 

. 특정 조건에서 이것은 자른 cv :: Mat, ie입니다. raw_image(x0, y0, w, h)의 반송은 raw_image가 또 다른 cv :: Mat입니다.

나중에 응용 프로그램에서 StretchBlt을 호출하여 이미지를 표시합니다. (.NET 응용 프로그램 내에서이 순수 관리되지 않는 환경에서 발생하지 않는 경우와 )

나는 .NET 응용 프로그램 내에서이 COM 구성 요소를 실행 해요 경우 StretchBlt에 대한 호출 할 때 (다시, 경우에만 실패) image가 잘립니다. 이미지가 잘리지 않는 코드 경로에서는 오류가 발생하지 않습니다. 드로잉 코드는 두 코드 경로에서 동일합니다. GetLastError()은 오류 8을 반환합니다.

누군가이 문제에 관해 밝힐 수 있습니까?

답변

2

오류 코드 8, according to MSDNERROR_NOT_ENOUGH_MEMORY에 해당합니다. 이제 .NET 환경에서 실행 중이므로 CLR이 프로세스에로드 된 이후 사용 가능한 메모리가 적습니다. 메모리 사용량을 줄이고 메모리 누수를 찾아야합니다.

+0

Dario, 감사합니다. 실제로 서명 된 값을 빼고 넘은 값이 int보다 큰 경우 stretchBlt에 가비지 데이터를 공급합니다. 당신은 누수에 대해 말했고 나는 코드를 자세히 살펴보고 그것을 발견했습니다. 고맙습니다! –