StretchBlt не удается - PullRequest
       27

StretchBlt не удается

1 голос
/ 23 августа 2011

У меня есть компонент 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.

Может кто-то пролить свет на эту проблему?

1 Ответ

2 голосов
/ 23 августа 2011

Код ошибки 8, в соответствии с MSDN , соответствует ERROR_NOT_ENOUGH_MEMORY.Теперь, когда вы работаете в среде .NET, у вас меньше доступной памяти, так как CLR загружен в ваш процесс.Вы должны попытаться уменьшить использование памяти, а также искать утечки памяти

...