我有一个COM组件。此COM组件在屏幕上显示图像。图像位通过缓冲区复制,如下所示:
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);
image
是cv :: Mat。在某些条件下,这是一个裁剪的cv :: Mat,即。返回raw_image(x0, y0, w, h)
raw_image
是另一个cv :: Mat。
稍后,应用程序调用{{1}}来显示图像。
如果我在.NET应用程序中运行此COM组件(并且在.NET应用程序内仅,则在纯非托管环境中不会发生这种情况)对{{1}的调用}(仅在何时)StretchBlt
被裁剪时失败。它不会在未裁剪图像的代码路径上失败。两个代码路径的绘图代码相同。 StretchBlt
将返回错误8。
有人可以解释这个问题吗?
答案 0 :(得分:2)
错误代码8 according to MSDN,对应ERROR_NOT_ENOUGH_MEMORY
。既然您在.NET环境中运行,那么自从CLR加载到您的进程后,您的可用内存就会减少。您应该尝试减少内存使用量,并查找内存泄漏