在 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);
此外,如果您已经知道支持的分辨率,您可以在开始播放之前尝试设置requestedHeight
和requestedWidth
。
【讨论】:
我现在从每台相机中得到了不同的价值,谢谢,但我怎么能告诉用户他的相机是例如64MP,我在日志中收到 1280 x 720 像素,这个结果不是我的设备屏幕分辨率吗?但是我正在寻找我的设备相机分辨率。以上是关于在 Unity 中获取真实设备的相机分辨率(即百万像素)的主要内容,如果未能解决你的问题,请参考以下文章
在flutter中从image_picker包中打开相机会导致真实设备上的应用程序崩溃,但在模拟器(android)中运行良好