У меня есть компонент 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
, чтобы показать изображение.
Если я запускаю этот COM-компонент внутри приложения .NET (и только , когда внутри приложения .NET это не происходит в чистой неуправляемой среде), вызов StretchBlt
завершается неудачно, когда (опять же, только когда) image
был обрезан. Это не сбой в пути кода, где изображение не обрезается. Код рисования одинаков для обоих путей кода. GetLastError()
вернет ошибку 8.
Может кто-то пролить свет на эту проблему?