1

我有一个 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);

imagecv::Mat在哪里。在某些条件下,这是一个裁剪的 cv::Mat,即。raw_image(x0, y0, w, h)where的返回raw_image是另一个 cv::Mat。

稍后应用程序调用StretchBlt以显示图像。

如果我在 .NET 应用程序中运行此 COM 组件(并且当在 .NET 应用程序中,这不会在纯非托管环境中发生)调用StretchBlt失败时(再次,仅当)image被裁剪。它不会在未裁剪图像的代码路径上失败。两个代码路径的绘图代码相同。GetLastError()将返回错误 8。

有人可以阐明这个问题吗?

4

1 回答 1

2

根据 MSDN ,错误代码 8对应于ERROR_NOT_ENOUGH_MEMORY. 现在您在 .NET 环境中运行,由于 CLR 已加载到您的进程中,因此可用内存较少。您应该尝试减少内存使用量,并寻找内存泄漏

于 2011-08-23T15:23:07.623 回答