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

前端之家收集整理的这篇文章主要介绍了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());

猜你在找的Android相关文章