у меня есть BitmapSource
созданный в потоке пользовательского интерфейса, и я хотел бы скопировать его данные пикселей в cv::Mat
для обработки в отдельном потоке. Конечно, это работает, если я заверну код Dispatcher.Invoke
звоните, но тогда я трачу время на синхронизацию.
int width = bitmapSource->PixelWidth;
int height = bitmapSource->PixelHeight;
int bytesPerPixel = bitmapSource->Format.BitsPerPixel / 8;
int stride = 4 * ((width * bytesPerPixel + 3) / 4);
...
cv::Mat &inputImage = wrapper.getRawImage(); // This is a refe
if (inputImage.size().width != width || inputImage.size().height != height || inputImage.type() != newType)
inputImage = cv::Mat::zeros(height, width, newType);
bitmapSource->CopyPixels(Int32Rect::Empty, IntPtr(inputImage.data), height*stride, stride);
Я пытался заморозить bitmapSource
объект, и теперь он работает до вызова CopyPixels
но при попытке скопировать его содержимое на inputImage
данные. Если объект заморожен, почему CopyPixels
не можете скопировать замороженный буфер в другой буфер памяти? Любые идеи о том, как избежать вызова на главной теме? Есть ли другой растровый объект WPF, способный сделать это?
Вы можете обратиться к Вот, хотя строки кода написаны на C #, но это очень ценно для вас
Других решений пока нет …