在 Unity 中获取真实设备的相机分辨率(即百万像素)

Posted

技术标签:

【中文标题】在 Unity 中获取真实设备的相机分辨率(即百万像素)【英文标题】:Get a real device camera resolution (i.e. Megapixels) in Unity 【发布时间】:2021-09-20 22:34:44 【问题描述】:

我正在尝试使用 Unity 2018 和 C# 获取物理设备的分辨率相机,因此我创建了一个 3D 对象立方体并在其中附加了以下脚本:

IEnumerator CameraResolution()

    WebCamDevice[] devices = WebCamTexture.devices;
    Debug.Log("Number of web cams connected: " + devices.Length);

    for (int i = 0; i < devices.Length; i++)
    
        string camName = devices[i].name;
        Debug.Log("selected webcam name is " + camName);

        if (backCam == null)
            backCam = new WebCamTexture();

        backCam.deviceName = camName;

        GetComponent<Renderer>().material.mainTexture = backCam;

        if (!backCam.isPlaying)
            backCam.Play();
        float h = backCam.height;
        float w = backCam.width;
        Debug.Log("The camera pixel is: " + (w / h) );
        yield return null;
    
    backCam.Stop();

但是,当我吃这个脚本时,我得到了错误的结果:

enter image description here

我想得到这样的结果示例: 摄像头像素为:64MP。

【问题讨论】:

另见***.com/questions/68250750/… 帖子中没有解决方案,评论对我的情况也没有帮助,我在发布这个问题之前就看到了。 啊,那个帖子不是你发的吗?主要类似,代码类似。很奇怪。 @mjwills 代码不相似,但基本完全相同,哈哈 ^^ OP 你的目标平台是什么?正如我在链接的问题中提到的某些平台,例如ios 无论实际分辨率如何,相机分辨率都是有限的 【参考方案1】:

您的代码中存在一些缺陷:

通过记录

w / h

除了宽高比,你什么都不会。

例如记录日志

Debug.Log($"The camera resolution is w x h pixels", this);

此外,您始终只通过默认构造函数创建一个WebCamTexture,该构造函数自动使用默认相机设备,因此始终具有相同的分辨率。

请注意API中的这些要点

这仅在相机未运行时设置时有效。

-> 你只启动纹理一次,然后在整个循环完成之前永远不要停止它。

注意:如果要使用 WebCamTexture 从通过 Unity Remote 连接的设备获取摄像头流,则必须通过构造函数对其进行初始化。无法将使用 WebCamTexture.deviceName 的设备从常规设备更改为远程设备,反之亦然。

-> 而不是设置名称而是通过构造函数创建新纹理然后你应该保存

你宁愿做的是例如

IEnumerator CameraResolution()

    WebCamDevice[] devices = WebCamTexture.devices;
    Debug.Log("Number of web cams connected: " + devices.Length);

    for (int i = 0; i < devices.Length; i++)
    
        string camName = devices[i].name;
        Debug.Log("selected webcam name is " + camName);

        backCam = new WebCamTexture(camName);

        GetComponent<Renderer>().material.mainTexture = backCam;

        backCam.Play();
        float h = backCam.height;
        float w = backCam.width;
        
        Debug.Log($"The camName camera resolution is w x h pixels", this);
        yield return null;
        backCam.Stop();
        Destroy(backCam);
       

此外,如果您已经知道支持的分辨率,您可以在开始播放之前尝试设置requestedHeightrequestedWidth

【讨论】:

我现在从每台相机中得到了不同的价值,谢谢,但我怎么能告诉用户他的相机是例如64MP,我在日志中收到 1280 x 720 像素,这个结果不是我的设备屏幕分辨率吗?但是我正在寻找我的设备相机分辨率。

以上是关于在 Unity 中获取真实设备的相机分辨率(即百万像素)的主要内容,如果未能解决你的问题,请参考以下文章

相机内在分辨率与真实屏幕分辨率

Unity中实现垂直角度的相机在不同分辨率下的适配

来自 Unity 的相机内在矩阵

unity 3d怎样在相机中导出rendertexture

在flutter中从image_picker包中打开相机会导致真实设备上的应用程序崩溃,但在模拟器(android)中运行良好

unity获取相机高度