gpt4 book ai didi

android - SurfaceView 的裁剪相机预览

转载 作者:行者123 更新时间:2023-11-29 15:07:27 26 4
gpt4 key购买 nike

我有一个用于条形码扫描的 SurfaceView(作者 this tutorial)。

<SurfaceView
android:id="@+id/camera_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone" />

需要设置屏幕高度为 1/4 的裁剪相机预览。

我根据屏幕尺寸设置 View 尺寸:

cameraView = (SurfaceView) findViewById(R.id.camera_view);

final DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(metrics.widthPixels, metrics.heightPixels / 4);
cameraView.setLayoutParams(layoutParams);

但相机预览只是在里面缩小了!

我是这样设置的

final BarcodeDetector barcodeDetector =
new BarcodeDetector.Builder(this)
.setBarcodeFormats(Barcode.ALL_FORMATS)
.build();

final CameraSource cameraSource = new CameraSource
.Builder(this, barcodeDetector)
.setRequestedPreviewSize(metrics.widthPixels, metrics.heightPixels / 4)
.setAutoFocusEnabled(true)
.build();

cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
cameraSource.start(cameraView.getHolder());
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
cameraSource.stop();
}
});

如何裁剪相机预览?只需要底部的 1/4 部分。

还需要添加一个带有矩形取景器的透明层。

最佳答案

您可能希望使用的是 TextureViewSurfaceViews 并非设计用于裁剪 - 视频显示调整为 SurfaceView 的大小是预期的行为。

另一方面,TextureViews 可从 API 级别 14+ 开始使用,它允许您设置 .setTransform(Matrix matrix),其中矩阵包含数据关于如何缩放视频,以及 .setTranslationX(float x).setTranslationY(float y) 裁剪视频。有一个很好的例子 here .

如果您绝对必须使用 SurfaceView,我建议您考虑使用 GLSurfaceView 和可缩放视频的自定义渲染器。一个好的起点是 here .

关于android - SurfaceView 的裁剪相机预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35730822/

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