示例圖像:Directshow&.Net - 位圖從圖像左側的右側顯示條紋?
我正在使用DirectShow.net將網絡攝像頭素材導入到我的程序中。 爲了實現這一點,我將源攝像頭添加到圖形中,並添加VideoMixingRenderer9。
這個部分全部都在流暢地運行,但是我使用GetCurrentImage(out lpDib)提取幀的部分只能說明我是一個奇怪的問題。
我正在做的是使用Marshal.PtrToSTructure從lpDib創建一個BitmapInfoHeader,然後計算寬度/高度/跨度/ &像素格式。
問題來了,當我看着位圖中存儲的圖像 - 它有一個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.
我完全迷失在這裏。看起來像某種抵消的問題,我試着大步調整一些,但無濟於事(只是創建奇怪的對角線外觀)。
有一段時間讓採樣卡工作正常 - 結束了讓事情適當工作(我只使用一個攝像頭,所以輸出是衆所周知的),只需剪掉左側10個像素關閉和移動它在右側。 感謝您的幫助,將此標記爲答案,因爲這就是它! – Matt 2009-09-10 19:30:41