Я учу Эмгу и хотел бы:
- Имейте объект Mat в VB.net (потому что я понимаю, что Mat - это предполагаемое использование Emgu 3)
- дать указатель на его базовый байтовый массив в виде IntPtr для функции dll c ++ (для меня это черный ящик, я не могу изменить свою подпись)
- имеют Emgu Imagebox отображать это изображение, управляемое событиями, когда данные изменяются
Что я пробовал до сих пор:
У меня есть решение, использующее обычную систему. Рисование объектов работает так же, как это.
У меня есть решение с использованием объектов Mat, которое требует переназначения imagebox.image = MatObject.Bitmap()
каждый раз, когда я хочу обновить
Вот код, который не работает:
Public Sub StartVideo(ByRef videoFrame As Image)
cts = New Threading.CancellationTokenSource()
Me._lastMat = New Mat(New Size(Me.Resolution.Width, Me.Resolution.Height), Me.ImageFormat, 1, Me._videoHandle.AddrOfPinnedObject(), Me.Resolution.Width * Me.BytesPerPixel)
Me._videoBmp = New Bitmap(Me.Resolution.Width, Me.Resolution.Height, Me.Resolution.Width * Me.BytesPerPixel, Imaging.PixelFormat.Format8bppIndexed, _videoHandle.AddrOfPinnedObject())
'videoFrame = Me._videoBmp
videoFrame = Me._lastMat.Bitmap()
Task.Run(Sub()
While Not cts.Token.IsCancellationRequested
If Me.GetVideoData(Me._videoHandle.AddrOfPinnedObject(), Me._videoBytes.Length, 10) Then
'Task.Run(Sub()
RaiseEvent HasNewVideo()
'End Sub)
Else
Dim test = True
End If
End While
End Sub, cts.Token)
End Sub
Обратите внимание, что когда я переключаю, какая из строк "videoFrame =" закомментирована, он работает с системным растровым объектом.