【问题标题】:Android - How to Crop Camera Preview using TextureViewAndroid - 如何使用 TextureView 裁剪相机预览
【发布时间】:2014-10-21 06:46:57
【问题描述】:

我有一个 WpxHp 预览,我想拍摄 HxW 图片,因此我希望用户看到一个预览窗口,该窗口与我要拍摄的图片具有相同的纵横比,而不是预览窗口。 如何使用 TextureView 裁剪预览?

--编辑

我的想法是使用比例矩阵来扭曲图像以补偿 TextureView 调整大小,让我解释一下:
我的目标预览(图像)尺寸为(W,H)。因此我需要将 TextureView 的大小调整为 (W,H)。这意味着失真只是可以由矩阵 S 表示的非均匀线性缩放。因此,如果我在调整视图大小之前使用 inv(S) 缩放图像,我应该获得与预览相同的原始尺寸(因此具有相同的纵横比)但是调整了 TextureView 的大小,这相当于裁剪。 我试过了,它似乎有效,但我正在寻找另一种方法

【问题讨论】:

  • 您可以看到在 Grafika 中操作相机预览的示例——参见“来自相机的纹理”活动。 github.com/google/grafika
  • 感谢您的提示!这很有趣。但是它不使用 TextureView 组件,而且它似乎没有裁剪任何东西,而是在支持的预览尺寸中搜索匹配
  • 使用滑块“缩放”。它有效地裁剪了源图像,并将其放大以匹配当前帧大小。 TextureView 与 SurfaceView 并不真正相关。这只是 GLES 的输出。
  • @mb_ 你找到解决方案了吗?因为我面临同样的问题,但无法产生结果。如果您找到了解决方案,请与我们分享。谢谢。

标签: android camera crop preview textureview


【解决方案1】:

我唯一能做到并且效果很好的就是添加一个比例。

我想用相机输出的一部分创建一个纹理视图,但是如果不让预览被缩放,我就无法做到。

所以在我决定了相机/屏幕比例的最佳分辨率以开始捕捉后,我得到了相机捕捉高度和我想要显示的高度之间的比例。

mPreviewSize = chooseOptimalSize(...);

int viewHeight = getDP(this, R.dimen.videoCaptureHeight);
float scaleY = mPreviewSize.getHeight() / viewHeight;
setScaleY(scaleY);

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多