【发布时间】:2011-01-03 22:42:25
【问题描述】:
我正在制作自己的网络摄像头延时摄影应用程序,但遇到了一些网络摄像头的问题。一个特别宣传它可以拍摄 5MP 的照片,但它运行的是原生 320x240(或一些可怕的东西),这是我得到的提要。
我使用的代码似乎可以很好地在网络上复制和粘贴,我用于访问网络摄像头的化身在这里 http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1339&lngWId=10 并使用avicap32访问网络摄像头,调用看起来像这样
mCapHwnd = capCreateCaptureWindowA("WebCap", 0, 0, 0, m_Width, m_Height, this.Handle.ToInt32(), 0);
SendMessage(mCapHwnd, WM_CAP_CONNECT, 0, 0);
SendMessage(mCapHwnd, WM_CAP_SET_PREVIEW, 0, 0);
我已经用另外两个网络摄像头进行了测试(一个内置在我的笔记本电脑中,一个是我玩过的旧摄像头),这两个摄像头的分辨率似乎都不错。
我已经修改了 Webcam_Capture 代码以尝试拍摄一张可笑的高分辨率图像
//private int m_Width = 320;
//private int m_Height = 240;
private int m_Width = 1600;
private int m_Height = 1200;
//private int m_Width = 3200;
//private int m_Height = 2400;
使用几种不同的分辨率,如上所示。
我的直觉告诉我,我需要做一些事情来让网络摄像头使用不同的分辨率,因为它似乎默认为某个原生值。
想法?
我很乐意发布更多我正在使用的代码,但这似乎是它的核心。 WM_SET_PREVIEW 可能需要解释一下,它是一个 API 常量。
public const int WM_CAP_CONNECT = 1034;
public const int WM_CAP_DISCONNECT = 1035;
public const int WM_CAP_GET_FRAME = 1084;
public const int WM_CAP_COPY = 1054;
public const int WM_CAP_START = WM_USER;
public const int WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41;
public const int WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42;
public const int WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43;
public const int WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44;
public const int WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45;
public const int WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46;
public const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
欢迎任何想法! 抢劫
【问题讨论】:
-
我猜你需要询问静止帧,而不是视频。
-
@Anon - 有趣的是,这就是 WM_SET_PREVIEW 所做的。 msdn.microsoft.com/en-us/library/dd743928(VS.85).aspx 我一直在查看其他可用的常量,但是,要了解它们是如何联系起来的并不容易。robg
-
我同意 Anon 的观点,5MB 照片并没有说明视频分辨率。
-
@lpthnc 这个应用程序最终适用于学校 - 出价最低者获胜。 :P
标签: c# webcam resolution vfw