0

我正在制作自己的网络摄像头延时应用程序,但有些网络摄像头有问题。一个特别宣传它可以拍摄 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;

欢迎任何想法!抢夺

4

1 回答 1

0

没有显示设置相机的代码。因此可能会应用默认的低分辨率。想法:

  1. 不使用 Video for Windows - API 已过时、受限且以编程方式不灵活。无论如何,WM_CAP_SET_VIDEOFORMAT消息会设置网络摄像头并更改分辨率。考虑改用 DirectShow 或 Media Foundation。

  2. Windows SDK 为您提供了 GraphEdit 工具,您可以在其中以交互方式构建捕获管道,特别是检查可用的分辨率。

  3. 检查相机规格:5 MP 静止图像并不意味着此分辨率可用于流式视频。视频分辨率可能是其中的 1/4,但肯定会比 320x240 更好。

于 2013-07-29T08:18:51.037 回答