Logitech pro9000 HDウェブカメラを使用しています。 2 mp zeiss lenceを持ち、HDビデオなどをキャプチャすることができます。blaa blaa 私のコードは全く同じではありませんが、単一の機能で統合されています。今実際の解像度と補間ビットマップ形式が混同されています
私は1600×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×1200バイトのサイズは1600×1200と同じですが、私のプログラムは、ビットマップIイベントにデータをビットマップのサイズを設定しようとすることをひそかすることはできませんから、より高い解像度のために1600 x 1200しかし、何も私は下にぼやけて取得またはプレビュービットマップの下部に複数の画像を引き延ばす。 は、私は、これは補間は、私がアクセスしていますが、ドライバや会社 によって与えられたカメラアプリケーションで実際に実装されている私の質問があり、補間 と呼ばれている知っている手段Iは補間データを取得していますか私は私のプログラムでは、アルゴリズムを実装する必要がありません。 これが事実であるならば、私は、デバイスイベントから1600×1200の画像を取得していない午前理由は何私を混同して、ドライバがまだロジクールから1600×1200枚の画像やソフトウェアを返却した場合である3264 X 2448のサイズに画像を補間されたことは、私はでビデオフォーマットを設定しますX 2448 3264 に初期化コード[私は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