Образец изображения:
Я использую DirectShow.net, чтобы записать видео с веб-камеры в свою программу.
Для этого я добавляю исходную камеру на график и VideoMixingRenderer9.
Эта часть работает плавно, но часть, где я извлекаю кадр с помощью GetCurrentImage (из lpDib), имеет то, что я могу описать только как странную проблему.
Я использую Marshal.PtrToSTructure для создания BitmapInfoHeader из lpDib, а затем вычисляю формат ширины / высоты / шага / & пикселя.
Проблема возникает, когда я смотрю на изображение, хранящееся в растровом изображении - у него есть линия шириной 10 пикселей вниз по левой стороне, полученная от того, что на самом деле является правым!
Стоит отметить, что данные, которые я получаю от вызова 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.
Я полностью потерян здесь. Похоже на какую-то проблему смещения, и я попытался немного поработать, но безрезультатно (просто создает странный диагональный вид).