【问题标题】:WebCamTexture iOS blurry snapshotWebCamTexture iOS 模糊快照
【发布时间】:2017-10-04 16:39:59
【问题描述】:

我目前正在使用 WebCamTexture 类来显示实时摄像机源,直到用户拍摄快照,然后我在我的应用程序中使用所述快照作为纹理。

这是我目前正在使用的代码:

private WebCamTexture cameraTexture;
private Texture2D snapshot;
public UITexture webCamTexture;

snapshot = new Texture2D(cameraTexture.width, cameraTexture.height);
snapshot.SetPixels(m_CameraTexture.GetPixels());
snapshot.Apply();
webCamTexture.mainTexture = snapshot;

注意:UITexture 类来自NGUI,只是为了在场景中显示纹理。

在 Android 设备上,似乎没有问题。但是,当我在 iOS 设备上使用它(在 iPad2 和 iPad3 上测试)时,纹理立即变为 设置时模糊。这是焦点问题吗?

我尝试了几件事,主要是在拍摄之前等待帧结束并在获取像素之前调用 cameraTexture.Pause(), 无济于事。

为什么 iOS 纹理会变得模糊?

【问题讨论】:

  • cameraTexture 的请求大小是多少?
  • 我使用的大小不是由代码设置的,我只是将纹理应用到我制作的预制件上,具体取决于我使用的平台的分辨率。这不是全屏,如果你想知道的话。
  • 做了一些进一步的测试。显然 Unity 支持的最大分辨率是 1280x720,不知道这是否有任何作用,因为我测试过的设备只有 1024x768 分辨率...有人吗?
  • 好吧,iPad 有 2 个摄像头。 720p 是前置摄像头分辨率。
  • 不确定分辨率是否真的是我的问题......当我显示实时摄像头时,它看起来很清晰,当我获取/设置像素时会出现问题,然后它才会变得模糊。

标签: ios unity3d textures webcam


【解决方案1】:

我遇到了同样的问题,但是在 Texture2D 构造函数中将 mipmaps 设置为 false 似乎可以为我解决这个问题

即:

snapshot = new Texture2D(webcamTexture.width, webcamTexture.height, TextureFormat.ARGB32, false);

不幸的是,我没有解释为什么它会起作用。

【讨论】:

  • mipmap 正在制作低分辨率版本的纹理并在它们之间淡入淡出,具体取决于相机离正在渲染的四边形有多远,我猜因为您使用的是 NGUI,您可能会将 UI 渲染为四边形在远离相机的地方看到,使纹理显示为纹理中细节较少的 mipmap 级别。
【解决方案2】:

我相信,既然它对 Android 来说没问题,那就是与捕获图像有关的问题。当您初始化 WebCamTexture 时,使用从相机捕获就像在录制视频一样,当您录制视频时,您无法使用对焦和防抖以及 ISO 设置。当你在 iOS 上拍照时,你实际上只是从这个提要中抓取帧,这并不是真正用于拍摄清晰照片的。插件 CameraCaptureKit (https://www.assetstore.unity3d.com/en/#!/content/56673) 扩展了 WebCamTexture 并通过使用两个蒸汽来解决这个问题,其中一个用于捕捉预览,同时等待用户捕捉静止图像,然后是另一个高分辨率。一个用于实际拍摄照片。考虑通过将一些新的 objc 代码集成为 iOS 插件来实现相同的功能,或者使用 Camera Capture Kit 之类的东西可以证明可以帮助解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多