c# - 如何列出相机可用的视频分辨率

标签 c# .net wpf camera directshow.net

如果我的 PC 上连接了多个摄像头...我想知道特定摄像头的最佳可用分辨率...

例如,一些相机是高清或全高清(1,280×720 像素 (720p) 或 1,920×1,080 像素 (1080i/1080p)),或者最常见的是网络相机....

我想知道至少相机工作正常的最佳视频模式...(相机使用的模式)

我的工作是使用 C# 在 WPF 上进行(我正在使用 Directshow)

提前致谢

最佳答案

这是我写的代码,对我来说效果很好

public static List<Point> GetAllAvailableResolution(DsDevice vidDev)
{
    try
    {
        int hr;
        int max = 0;
        int bitCount = 0;
        IBaseFilter sourceFilter = null;
        var m_FilterGraph2 = new FilterGraph() as IFilterGraph2;
        hr = m_FilterGraph2.AddSourceFilterForMoniker(vidDev.Mon, null, vidDev.Name, out sourceFilter);
        var pRaw2 = DsFindPin.ByCategory(sourceFilter, PinCategory.Capture, 0);
        var AvailableResolutions = new List<Point>();
        VideoInfoHeader v = new VideoInfoHeader();
        IEnumMediaTypes mediaTypeEnum;
        hr = pRaw2.EnumMediaTypes(out mediaTypeEnum);
        AMMediaType[] mediaTypes = new AMMediaType[1];
        IntPtr fetched = IntPtr.Zero;
        hr = mediaTypeEnum.Next(1, mediaTypes, fetched);

        while (fetched != null && mediaTypes[0] != null)
        {
            Marshal.PtrToStructure(mediaTypes[0].formatPtr, v);
            if (v.BmiHeader.Size != 0 && v.BmiHeader.BitCount != 0)
            {
                if (v.BmiHeader.BitCount > bitCount)
                {
                    AvailableResolutions.Clear();
                    max = 0;
                    bitCount = v.BmiHeader.BitCount;
                }
                AvailableResolutions.Add(new Point(v.BmiHeader.Width, v.BmiHeader.Height));
                if (v.BmiHeader.Width > max || v.BmiHeader.Height > max)
                    max = (Math.Max(v.BmiHeader.Width, v.BmiHeader.Height));
            }
            hr = mediaTypeEnum.Next(1, mediaTypes, fetched);
        }
        return AvailableResolutions;
    }

    catch (Exception ex)
    {
        Log(ex);
        return new List<Point>();
    }
}

(例如,这可以添加到 WPF-MediaKit 中的 VideoCaptureElement)

关于c# - 如何列出相机可用的视频分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7497559/

相关文章:

.net - AgentRestart.dat 的用途是什么

c# - 防止 ScrollViewer 处理 ListBox 项中的 Tap 事件

WPF 多行 TextBlock 中心对齐问题

c# - 在映射中保留 null - 不要为类型创建默认值

c# - 使用 "clear"方法与新对象

c# - 使用 .net api 的电子商务网站的开源多面搜索/引导导航

c# - 列表中的 wpf 扩展器在检查时并不总是执行命令

c# - 将 List<X> 转换为 DBDataReader

c# - 使用JNA将c#的字符串转换为java

C#套接字编程