StretchBlt fails



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

之后,应用程序调用StretchBlt来显示图像。

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

有人能解释一下这个问题吗?

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

相关内容

  • 没有找到相关文章

最新更新