Android OpenGL camera2纹理分辨率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android OpenGL camera2纹理分辨率相关的知识,希望对你有一定的参考价值。

介绍

我正在使用CaptureRequest.Builder并提供两个表面作为目标:用于绘制GL的SurfaceTexture和用于处理帧的ImageReadergetSurface())。

我通过设置surfaceTexture.setDefaultBufferSize和创建ImageReader.newInstance来设置所需的分辨率640x480。

问题

似乎SurfaceTexture OpenGL纹理获得的图像具有与640x480(4:3)不同的纵横比,更像是2560x1440(16:9)(SurfaceTexture占据全屏,见IMG 3)。必须注意的是,两部手机的分辨率宽高比为16:9。 (故意留下从侧面偏移的纹理)。

您可以在下面看到监视器屏幕上显示的IMG 1,IMG 2和IMG 3是电话屏幕截图,其中当前活动视图显示摄像机预览。

这个问题

如何正确地强制SurfaceTextureGLSurfaceView.Renderer获取特定的(在这种情况下为4:3)宽高比纹理图像从相机任意大小查看?

相应

必须注意的是,有an app解决问题,但对于那个they change the view size对应于所需的宽高比。

也可以看看:

IMG 1 - 显示的源图像:enter image description here

IMG 2 - 良好的宽高比(Google Nexus 5 - android 6.0.1):enter image description here

IMG 3 - 纹理宽高比差(LG-D855 - Android 5.0)enter image description here

答案

通过将LG手机更新到Android 6.0来“修复”此问题。

以上是关于Android OpenGL camera2纹理分辨率的主要内容,如果未能解决你的问题,请参考以下文章

Android音视频(六) 使用OpenGL ES 3.0预览Camera

Android 上的 OpenGL - 将位图转换为纹理,并保存纹理

Android OpenGL ES----理解纹理与纹理过滤

OpenGL ES 在不使用 glPixelStorei 的情况下更新纹理的子部分

Android OpenGL 纹理/对象检测

初学Android OpenGL ES之使用纹理 八十三