1

USBビデオカメラAPIの使用方法を理解しようとしていますが、これはやや明確ではありません(少なくとも、開発者からの以前の知識に頼っているようで、「全体像」を理解していないと思います。しゃれが意図されています) )。

データを正常に受信している次のイベント ハンドラーがありますが、現時点ではコンソールにのみ出力できます。

    void  _camera_OnPreviewBitmap(IntPtr pbyteBitmap, uint dwBufferSize,
                                  uint dwWidth, uint dwHeight,
                                  uint dwFrameNo, uint dwPreviewPixelFormat) {

        Console.WriteLine(string.Format("{0}, {1}, {2}, {3}, {4}, {5}", pbyteBitmap, dwBufferSize, dwWidth, dwHeight, dwFrameNo, dwPreviewPixelFormat));

        //The callback function gets the image data as “IntPtr” type. 
        //When using “System.Runtime.InteropServices.Marshal.Copy”, the image data can copy to the array. 
        //When using “System.Runtime.InteropServices.Marchal.ReadByte”, the image data can get thedirectory. 
        //Sometimes the process speed is fast when receiving the image data after the image data copy to the array with 
        //“System.Runtime.InteropServices.Marchal.Copy”. 

    } 

これにより、次の結果が得られます。

259129344, 1228800, 1280, 960, 195051, 1
250281984, 1228800, 1280, 960, 195052, 1
259129344, 1228800, 1280, 960, 195053, 1
250281984, 1228800, 1280, 960, 195054, 1
259129344, 1228800, 1280, 960, 195055, 1
250281984, 1228800, 1280, 960, 195056, 1
259129344, 1228800, 1280, 960, 195057, 1
250281984, 1228800, 1280, 960, 195058, 1
259129344, 1228800, 1280, 960, 195059, 1
250281984, 1228800, 1280, 960, 195060, 1
259129344, 1228800, 1280, 960, 195061, 1
250281984, 1228800, 1280, 960, 195062, 1

したがって、これは画像のサイズ (1280 x 960) と一致しており、1228800 はピクセル数 (バッファー サイズ) であり、1for ピクセル フォーマットはPIXEL_FORMAT_08_MONO_OR_RAWカメラ API ピクセル フォーマット列挙 (この BW カメラとも一致) に従っていることを意味します。

私の質問は:

System.Drawing.Bitmapこの情報を取得してオブジェクトを作成するにはどうすればよいですか?

私はすでにこれを試しましたが、成功しませんでした(明らかに、グレースケール画像は実際にはインデックス化されていません...):

        var bmp = new System.Drawing.Bitmap((int)dwWidth, (int)dwHeight, (int)dwBufferSize,
                                            PixelFormat.Format8bppIndexed, pbyteBitmap);

これにより、最終的に「一般的な GDI+ エラー」が発生します。

4

1 に答える 1