StretchBlt失败

时间:2011-08-23 15:07:18

标签: .net com activex stretchblt

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

有人可以解释这个问题吗?

1 个答案:

答案 0 :(得分:2)

错误代码8 according to MSDN,对应ERROR_NOT_ENOUGH_MEMORY。既然您在.NET环境中运行,那么自从CLR加载到您的进程后,您的可用内存就会减少。您应该尝试减少内存使用量,并查找内存泄漏