学向勤中得,萤窗万卷书。这篇文章主要讲述Android OpenGL camera2纹理分辨率相关的知识,希望能为你提供帮助。
介绍
我正在使用CaptureRequest.Builder并提供两个表面作为目标:用于绘制GL的SurfaceTexture和用于处理帧的ImageReader(getSurface())。
我通过设置surfaceTexture.setDefaultBufferSize和创建ImageReader.newInstance来设置所需的分辨率640x480。
问题
似乎SurfaceTexture OpenGL纹理获得的图像具有与640x480(4:3)不同的纵横比,更像是2560x1440(16:9)(SurfaceTexture占据全屏,见IMG 3)。必须注意的是,两部手机的分辨率宽高比为16:9。 (故意留下从侧面偏移的纹理)。
【Android OpenGL camera2纹理分辨率】您可以在下面看到监视器屏幕上显示的IMG 1,IMG 2和IMG 3是电话屏幕截图,其中当前活动视图显示摄像机预览。
这个问题
如何正确地强制SurfaceTexture或GLSurfaceView.Renderer获取特定的(在这种情况下为4:3)宽高比纹理图像从相机任意大小查看?
相应
必须注意的是,有an app解决问题,但对于那个they change the view size对应于所需的宽高比。
也可以看看:
- GitHub repo。
- Relevant source code。
- Related post
- Related post
文章图片
IMG 2- 良好的宽高比(Google Nexus 5-android 6.0.1):
文章图片
IMG 3- 纹理宽高比差(LG-D855-Android 5.0)
文章图片
答案通过将LG手机更新到Android 6.0来“修复”此问题。
推荐阅读
- Android OpenGL ES 3.1着色器无法编译
- Android NDK GLThread
- 如何在Symfony 3中使用Google Translate免费翻译不同语言的文本
- FOSUserBundle(必须配置路径”fos_user”的子节点”from_email”)
- 如何在Symfony 3中检测移动设备
- 如何在WinForms中为CefSharp启用WebRTC(访问摄像机和麦克风)
- 如何在Symfony 3中将数字转换为单词(数字拼写)
- 如何解决MySQL常规错误(1030从存储引擎得到了139错误)
- 如何在Symfony 3中使用php创建Word文件