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

Jay*_*yco 5 camera android textures opengl-es-2.0

我正在使用SurfaceTexture绘制相机的预览,需要知道纹理大小+过程中发生的事情.

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

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

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

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

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

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

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

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

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

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

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

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

gme*_*tax 6

实际上,当您预览时,您可以设置缓冲区以“保持”“大”分辨率。

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());
Run Code Online (Sandbox Code Playgroud)