使用DirectShow更改图像捕获的尺寸

时间:2013-10-28 13:51:15

标签: c# .net image-processing video-capture

我正在使用DirecShowLib-2005.Dll从我的笔记本电脑摄像头拍照。最初我使用的图像大小为640 x 840.这些配置在我正在使用的示例中给出

   const int VIDEODEVICE = 0; 
   const int VIDEOWIDTH = 640; 
   const int VIDEOHEIGHT = 480; 
   const int VIDEOBITSPERPIXEL = 24;

在声明Capture对象时传递这些值,即

 cam = new Capture(VIDEODEVICE, VIDEOWIDTH, VIDEOHEIGHT, VIDEOBITSPERPIXEL, picCamera);

每件事都很好。但是我想用Passport Size拍照,即宽度更小,高度更高。当我改变常量的宽度和高度时DLL停止工作。有人请指导我如何改变宽度和高度?

1 个答案:

答案 0 :(得分:1)

您可以更改相机设置中定义的分辨率。例如320x240等。当您创建快照图像时,调整Bitmap对象的大小并可能裁剪它的两侧。例如,我使用了这段代码:

IntPtr m_ip = IntPtr.Zero;
m_ip = capture.Click();
Bitmap b = new Bitmap(640, 480, capture.Stride, PixelFormat.Format24bppRgb, m_ip);
b = ResizeBitmap(b,220,220); //The size of your box
b.RotateFlip(RotateFlipType.RotateNoneFlipY);
pictureBox2.Image = b;

private static Bitmap ResizeBitmap(Bitmap sourceBMP, int width, int height)
{
   Bitmap result = new Bitmap(width, height);
   using (Graphics g = Graphics.FromImage(result))
   g.DrawImage(sourceBMP, 0, 0, width, height);
   return result;
}