Я использую веб-камеру Logitech pro9000 HD. Которые имеют 2 мегапикселя Zeiss Lence и могут захватывать HD видео и т. Д. Blaa Blaa
Мой код [не совсем такой же, но интегрированный в одну функцию.
Теперь проблема, если я использую разрешение до 1600 x 1200, все работает нормально. И получил размер байта следующим образом
for 640 x 480 VideoHeader.dwBytesUsed are 921600
for 1600 x 1200 VideoHeader.dwBytesUsed are 5760000
from 1600 x 1200 to 3264 x 2448 VideoHeader.dwBytesUsed are 5760000
Но для более высокого разрешения от 1600 x 1200 размер байта такой же, как 1600 x 1200, но моя программа не может преобразовать эти данные в растровое изображение. Я пытаюсь установить размер растрового изображения равным 1600 x 1200, но ничего не получается, я получаю только размытость внизу или несколько растянутых изображений внизу растрового изображения предварительного просмотра.
Я знаю, что это называется интерполяцией
Мой вопрос заключается в том, где интерполяции фактически реализованы в драйвере, к которому я обращаюсь, или в приложении камеры, предоставленном компанией.
Это означает, что я получаю интерполированные данные или мне нужно реализовать алгоритм в моей программе.
Что меня смутило, если драйвер все еще возвращает 1600 x 1200 изображений, а программное обеспечение от Logitech интерполирует изображение до размера 3264 x 2448, если это так, то почему я не получаю изображение 1600 x 1200 из события устройства, я установил формат видео в init код до 3264 х 2448
[Я установил бит на 24, и камера использует формат пикселя Format24bppRgb]
кто-нибудь может мне помочь! ....
мой код
Private Sub FrameCallBack(ByVal lwnd As IntPtr, ByVal lpVHdr As IntPtr)
Dim _SnapSize As Size = New Size(640, 480)
'Dim _SnapSize As Size = New Size(1600, 1200)
Dim _SnapSize As Size = New Size(3264, 2448)
Dim VideoHeader As New Avicap.VIDEOHDR
Dim VideoData(-1) As Byte
VideoHeader = CType(Avicap.GetStructure(lpVHdr, VideoHeader), Avicap.VIDEOHDR)
VideoData = New Byte(VideoHeader.dwBytesUsed - 1) {}
Marshal.Copy(VideoHeader.lpData, VideoData, 0, VideoData.Length)
Dim _SnapFormat As System.Drawing.Imaging.PixelFormat = PixelFormat.Format24bppRgb
Dim outBit As Bitmap
If Me.IsValidData Then
outBit = New Bitmap(_SnapSize.Width, _SnapSize.Height, _SnapFormat)
Dim bitData As BitmapData
bitData = outBit.LockBits(New Rectangle(Point.Empty, _SnapSize), ImageLockMode.WriteOnly, _SnapFormat)
outBit.UnlockBits(bitData)
GC.Collect()
GC.WaitForPendingFinalizers()
End If
End Sub