gpt4 book ai didi

Android Camera 2 预览尺寸和设备纵横比

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:27 25 4
gpt4 key购买 nike

我正在我的项目中实现 Camera 2 API。我正在使用 TextureView 和这些代码行来设置相机全屏预览大小:

StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
mPreviewSize = map.getOutputSizes(SurfaceTexture.class)[0];

这似乎是设备支持的最大预览尺寸。我不确定这个尺寸是否适用于所有设备并适合其设备的纵横比而不被拉伸(stretch)。有人知道吗?

最佳答案

如果您的相机分辨率、纹理 View 和您设备的显示尺寸不相同,那么您必须调整尺寸。为此,您必须将 TextureView 放在 FrameLayout 中。以下代码适用于具有各种显示分辨率的所有设备。

如果您正在全屏预览,请获取显示尺寸。获取 int DSI_heightint DSI_width 全局变量。

    DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
DSI_height = displayMetrics.heightPixels;
DSI_width = displayMetrics.widthPixels;

从 Camera2 API 中选择您需要的分辨率并分配给 Size imageDimension,全局获取 private Size imageDimension 并使用

setAspectRatioTextureView(imageDimension.getHeight(),imageDimension.getWidth());

并使用下面的逻辑

private void setAspectRatioTextureView(int ResolutionWidth , int ResolutionHeight )
{
if(ResolutionWidth > ResolutionHeight){
int newWidth = DSI_width;
int newHeight = ((DSI_width * ResolutionWidth)/ResolutionHeight);
updateTextureViewSize(newWidth,newHeight);

}else {
int newWidth = DSI_width;
int newHeight = ((DSI_width * ResolutionHeight)/ResolutionWidth);
updateTextureViewSize(newWidth,newHeight);
}

}

private void updateTextureViewSize(int viewWidth, int viewHeight) {
Log.d(TAG, "TextureView Width : " + viewWidth + " TextureView Height : " + viewHeight);
textureView.setLayoutParams(new FrameLayout.LayoutParams(viewWidth, viewHeight));
}

关于Android Camera 2 预览尺寸和设备纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37434494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com