我有一个 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)
where的返回raw_image
是另一个 cv::Mat。
稍后应用程序调用StretchBlt
以显示图像。
如果我在 .NET 应用程序中运行此 COM 组件(并且仅当在 .NET 应用程序中,这不会在纯非托管环境中发生)调用StretchBlt
失败时(再次,仅当)image
被裁剪。它不会在未裁剪图像的代码路径上失败。两个代码路径的绘图代码相同。GetLastError()
将返回错误 8。
有人可以阐明这个问题吗?