サンプル画像:DirectShow&.Net - イメージの左側にあるストライプがビットマップに表示されますか?
私はDirectShow.netを使用して自分のプログラムにウェブカメラ映像を取得しています。 これを達成するために、私はグラフにソースカメラを加え、VideoMixingRenderer9を追加します。
その部分はすごく動き出していますが、GetCurrentImage(out lpDib)を使用してフレームを抽出する部分は、奇妙な問題としてしか記述できません。
私は、Marshal.PtrToSTructureを使ってlpDibからBitmapInfoHeaderを作成し、width/height/stride/&ピクセル形式を計算しています。
ビットマップに保存された画像を見ると問題が発生します。実際には右から来た10px幅の線が左側にあります。
GetCurrentImage呼び出しから取得したデータが実際には逆さまになっていることに注意してください.Cap.RotateFlipへの呼び出しに注意してください。
IntPtr lpDib;
windowlessCtrl.GetCurrentImage(out lpDib);
BitmapInfoHeader head;
head = (BitmapInfoHeader)Marshal.PtrToStructure(lpDib, typeof(BitmapInfoHeader));
int width = head.Width;
int height = head.Height;
int stride = width * (head.BitCount/8);
PixelFormat pixelFormat = PixelFormat.Format24bppRgb;
switch (head.BitCount)
{
case 24: pixelFormat = PixelFormat.Format24bppRgb; break;
case 32: pixelFormat = PixelFormat.Format32bppRgb; break;
case 48: pixelFormat = PixelFormat.Format48bppRgb; break;
default: throw new Exception("Unknown BitCount");
}
Cap = new Bitmap(width, height, stride, pixelFormat, lpDib);
Cap.RotateFlip(RotateFlipType.RotateNoneFlipY);
//if we examine Cap here (Cap.Save, for example) I'm seeing the odd stripe.
私はここで完全に失われています。いくつかの種類の相殺問題のように見えますが、私はいくつかのストライドで調整しようとしましたが、役に立たない(ちょうど奇妙な斜めの外観を作成します)。
サンプルグラバーを正しく動作させるには時間がかかっていました。適切に動作するように巻き上げられました(私は1台のカメラしか使用していないので、出力はよく分かります)。それは右側にあります。 あなたの助けていただきありがとうございます。それはそれが何であるかの理由で、これを回答としてマークします! – Matt