微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – SurfaceTexture大小,它是如何定义的?

我正在使用SurfaceTexture来绘制相机的预览,并且需要知道纹理的大小在过程中发生了什么.

假设设备支持的相机预览尺寸为:

1280 720,1024 576,960 720,800 600,800 480,768 576,736 552等.

很明显,这些尺寸与标准纹理尺寸2048×2048,2048×1024,1024×1024之间存在不匹配…

我可以想到以下情况,但我不确定:

1,表面纹理的大小与所选的预览尺寸相同,例如1280 x 720,但这不是pow2格式,可能意味着兼容性问题

2,表面纹理包含在pow2格式的下一个尺寸内,未转换,例如1280×720将包含在2048 x 1024纹理内,没有拉伸,部分纹理仍未使用.

3,表面纹理的大小适合下一个pow2纹理(可能甚至大小下降),图像比例丢失,质量也受损.例如1920 x 1080横跨2048 x 2048.

4,还有其他一些可能吗?

如何将相机预览映射到纹理以及最终如何定义纹理大小?

最佳答案
实际上,当您预览时,您可以将缓冲区设置为“保持”“大”分辨率.

Size mPreviewSize;

CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);

String cameraId = manager.getCameraIdList()[0];
Cameracharacteristics characteristics = manager.getCameracharacteristics(cameraId);

StreamConfigurationMap map = characteristics.get(Cameracharacteristics.SCALER_STREAM_CONfigURATION_MAP);
mPreviewSize = map.getoutputSizes(SurfaceTexture.class)[0];

SurfaceTexture texture = mTextureView.getSurfaceTexture();
// We configure the size of default buffer to be the size of camera
// preview we want.
texture.setDefaultBufferSize(mPreviewSize.getWidth(),mPreviewSize.getHeight());

原文地址:https://www.jb51.cc/android/431091.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐