Windows:如何获取相机支持的分辨率?

2024-03-11

因此,为了获取相机列表并让用户选择一个(C++、Boost、dshow、Windows),我使用这样的代码:

#include "StdAfx.h"
#include "list.h"
#include <windows.h>
#include <dshow.h>
#include <boost/lexical_cast.hpp>

HRESULT CamerasList::EnumerateDevices( REFGUID category, IEnumMoniker **ppEnum )
{
    // Create the System Device Enumerator.
    ICreateDevEnum *pDevEnum;
    HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,  
        CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDevEnum));

    if (SUCCEEDED(hr))
    {
        // Create an enumerator for the category.
        hr = pDevEnum->CreateClassEnumerator(category, ppEnum, 0);
        if (hr == S_FALSE)
        {
            hr = VFW_E_NOT_FOUND;  // The category is empty. Treat as an error.
        }
        pDevEnum->Release();
    }
    return hr;
}

int CamerasList::SelectFromList()
{   int i = 0;
    int SelectedIndex;
    IEnumMoniker *pEnum;
    printf("\nLet us select video device\n");
    printf("Available Capture Devices are:\n");
    HRESULT hr;
    hr = EnumerateDevices(CLSID_VideoInputDeviceCategory, &pEnum);
    if (SUCCEEDED(hr))
    {
        IMoniker *pMoniker = NULL;

        while (pEnum->Next(1, &pMoniker, NULL) == S_OK)
        {
            IPropertyBag *pPropBag;
            HRESULT hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag));
            if (FAILED(hr))
            {
                pMoniker->Release();
                continue;  
            } 

            VARIANT var;
            VariantInit(&var);

            // Get description or friendly name.
            hr = pPropBag->Read(L"Description", &var, 0);
            if (FAILED(hr))
            {
                hr = pPropBag->Read(L"FriendlyName", &var, 0);
            }
            if (SUCCEEDED(hr))
            {
                std::cout << i;
                printf(") %S\n", var.bstrVal);
                i++;
                VariantClear(&var); 
            }

            hr = pPropBag->Write(L"FriendlyName", &var);

            pPropBag->Release();
            pMoniker->Release();

        }
        SelectedIndex = 999;
    if (i <= 0)
    {
        cout <<"No devices found. \n " << endl;
        //cout <<"Please restart application."  << endl;
        //cin.get();
        //Sleep(999999);
    return 999;

    }else if(i == 1){
            cout <<"Default device will be used\n" << std::endl;
            SelectedIndex = 0;
        }else{
        while(SelectedIndex > i-1 || SelectedIndex < 0)
        {
            try{        
            std::string s;
            std::getline( cin, s, '\n' );
            SelectedIndex =  boost::lexical_cast<int>(s);
            }
            catch(std::exception& e){
                std::cout <<"please input index from 0 to " << i-1 << std::endl;
                SelectedIndex = 999;
            }
        }}
        pEnum->Release();
    }else
    {
        printf("no Video Devices found. \n") ;
        //cout <<"Please restart application."  << endl;
        //cin.get();
        //Sleep(999999);
        return 999;
    }
    return SelectedIndex;
}

我需要以某种方式获取所选相机支持的相机分辨率列表。这样的事该怎么办呢?


假设您已将捕获源过滤器添加到图表中: 一种方法是获取IAM流配置 http://msdn.microsoft.com/en-us/library/dd319784%28VS.85%29.aspx捕获过滤器输出引脚的接口,然后调用 IAMStreamConfig::GetNumberOfCapabilities 获取设备支持的格式功能数量。您可以通过使用适当的索引调用 IAMStreamConfig::GetStreamCaps 来迭代所有格式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows:如何获取相机支持的分辨率? 的相关文章

  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • 为什么 set_symmetry_difference 无法与比较器一起使用?

    Example program include
  • 如何从文本文件读取整数到数组

    这就是我想做的 我对此有些不满 但我希望你能容忍我 这对我来说是一个非常新的概念 1 在我的程序中 我希望创建一个包含 50 个整数的数组来保存来自文件的数据 我的程序必须获取用户的文档文件夹的路径 2 文件的名称为 grades txt
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 如何获取Windows批处理的父文件夹

    我正在编写一个批处理文件 我需要获取该bat文件的父文件夹 有可能吗 注意 我的意思是批处理文件的父文件夹 而不是调用该批处理的提示的当前目录 Thanks 批处理的父文件夹位于变量中 dp0位于 例子 echo off setlocal
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐

  • 如何向 iPhone 应用程序添加注销功能?

    我有一个具有以下布局的应用程序 当您打开应用程序时 您会看到登录屏幕 您登录后会看到一个包含 3 个选项卡的选项卡栏 登录视图在选项卡栏的appdelegate中显示为presentModalView 在第三个选项卡中有一个注销按钮 我希望
  • Python ctypes:复制结构的内容

    我想用 ctypes 在 Python 中模仿一段 C 代码 代码如下 typedef struct int x int y point void copy point point a point b a b 在 ctypes 中不可能执行
  • __init__() 缺少 1 个必需的位置参数

    我正在努力学习Python 这是一个非常简单的代码 我在这里想做的就是调用类的构造函数 初始化一些变量并打印该变量 但它给了我一个错误 missing 1 required positional argument class DHT def
  • 在 Mac OS 中使用 JAVA 注册表

    我写了一个Java桌面应用程序在Windows正在使用的平台Windows注册表保存应用程序信息 例如应用程序位置 时间段 例如最多 30 天的免费试用 等 现在 我想创建相同的java应用程序来运行Mac OS 虽然大多数java代码是相
  • 为什么一个文件对象刷新,而另一个文件对象不刷新?

    我想要一个在写入数据时直接刷新到文件的文件对象 并写道 class FlushingFileObject file def write self args kwargs return val file write self args kwa
  • 通过点击铅笔调用监听器(primefaces 2.2.1 rowEditor)

    在 rowEditor 上单击铅笔后如何调用侦听器 我想从 dataTable 中准备文本进行编辑 清除制表符和回车符的 html 标签 你有什么想法 谢谢 实际上 数据表中没有铅笔事件 如果你想在铅笔点击后调用监听器 你可以这样做 将 r
  • JPA (Hibernate) + Spring:处理唯一约束违规

    我有一个具有唯一字段的实体 A 该字段基本上定义了该实体 这意味着它是相等的 那么实体也完全相同 第二点是 如果违反该约束 那么绝不是例外 这意味着完全可以预期用户会尝试输入重复项 如果出现重复 应用程序应该默默地选择已经存在的实体 我现在
  • 通过名称或索引引用列的函数

    我希望能够在一个向量中按名称和索引引用列 作为示例 我仅指定 编辑 我更改了原始向量的顺序 因为我希望顺序无关紧要 columns lt c 1 7 j 8 i 然后我想检索索引 1 到 9 的名称并将它们添加到向量中 在正确的位置 我有一
  • Eclipse 写入控制台

    在 Eclipse 中 如何将调试语句写入控制台窗口 我试过 System out print urls System out println urls Log d tag urls 但我没有看到任何地方显示的值 Thanks 创建一个控制
  • 如何从命令行覆盖 protractor.conf.js 值?

    我目前有量角器设置可以在我们的集成服务器上运行 在 protractor conf js 文件中我有以下内容 multiCapabilities browserName firefox platform MAC browserName ch
  • 检查函数是否返回 true 以执行另一个函数

    我用 JS 编写了一个表单验证 以 return true 结尾 function check validation code return true 我想要的是 需要检查 check 函数是否返回 true 我想执行另一个函数 我尝试过的
  • 如何在 Jinja2 上解压多个变量

    我正在尝试在 jinja 模板引擎上解压多个变量 我怎样才能实现这个目标 我正在努力实现这样的目标 for item1 item2 item3 in items div class row div class four columns im
  • 如何检测文本区域的任何更改?

    我目前已将我的文本区域绑定到几个似乎有效的事件 然而 问题是事件重叠并触发多次 这反过来又使性能降低了太多 我想要做的几乎是捕获文本区域的任何更改 单击 粘贴 keyup keydown 右键单击上下文菜单编辑 右键单击 剪切 删除 粘贴
  • Telegram bot API:我可以混合使用自定义键盘和force_reply吗?

    我有一个自定义键盘 但要处理答案 我需要强制回复 以便我在下一条消息中收到问题 我已经这样做了 var opts reply markup JSON stringify keyboard OK Cancel one time keyboar
  • 导入错误:没有名为 pynotify 的模块。安装模块时

    所以这个错误不断出现 每次我尝试运行该脚本时 它都会返回 Traceback most recent call last File cli py line 11 in
  • Firebase 中现有的快照类型有什么区别?

    随着我在 Flutter 中的代码和编码经验的进一步发展 我在使用 Firebase API 时遇到过不同类型的快照 我说的是 AsyncSnapshots QuerySnapshots DocumentSnapshots 和 DataSn
  • 如何过滤指定时间段内的 Facebook 潜在客户

    我正在使用 Facebook API v4 获取潜在客户列表 使用 PHP 和库中内置的 get 方法 我想知道如何将日期范围传递到请求中以仅获取 2 个日期之间的潜在客户 我首先使用以下命令获取 adets 列表 request fb g
  • 生成类型类实例时无法证明单例类型是单例类型

    假设我有一个类型类 它证明 Shapeless 联积中的所有类型都是单例类型 import shapeless trait AllSingletons A C lt Coproduct def values List A object Al
  • ng-repeat 中的 Angular UI 工具提示未关闭

    请看下面的 plunker http plnkr co edit RPpjULZsSDnTFPKiafl2 http plnkr co edit RPpjULZsSDnTFPKiafl2 基本上 当向上 向下移动到 ng disabled
  • Windows:如何获取相机支持的分辨率?

    因此 为了获取相机列表并让用户选择一个 C Boost dshow Windows 我使用这样的代码 include StdAfx h include list h include