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



我正试图使用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();
}

然而,当我午餐时得到了一个错误的结果这个脚本:

在此处输入图像描述

我想举一个这样的例子:相机像素为:64MP。

代码中的一些缺陷:

通过记录

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

相关内容

  • 没有找到相关文章

最新更新