2014-08-27 37 views
4

我有一个预览是WpxHp,我想拍摄HxW图片,因此我希望用户看到一个预览窗口,它具有与我将拍摄的图片相同的宽高比,而不是预览中的一个。 如何使用TextureView裁剪预览?Android - 如何使用纹理裁剪相机预览

- 编辑

了我认为是用一个尺度矩阵在扭曲的形象,以cmpensate为TextureView调整大小,让我更好地解释:
我有一个目标预览(图)大小是(W,H)。因此我需要将TextureView调整为(W,H)。这意味着失真仅仅是由矩阵S表示的非均匀线性缩放。因此,如果我在调整视图大小之前用inv(S)缩放图像,我应该获得预览的相同原始尺寸(因此具有相同的纵横比)但TextureView调整大小,这相当于一个作物。 我试过了,它似乎工作,但我正在寻找一种替代方式

+1

您可以看到在Grafika中操作相机预览的示例 - 请参阅“来自相机的纹理”活动。 https://github.com/google/grafika – fadden 2014-08-27 16:04:50

+0

感谢您的提示!这很有趣。然而,它不使用TextureView组件,它看起来不会修剪任何东西,而是在支持的预览尺寸中搜索匹配项 – LJSilver 2014-08-27 17:13:32

+0

使用滑块“缩放”。它有效地裁剪源图像,并将其缩放以匹配当前帧大小。 TextureView与SurfaceView并不真正相关;它只是GLES输出。 – fadden 2014-08-27 20:29:02

回答

0

我已经设法做的唯一,它工作良好的是添加一个规模。

我想用相机输出的一部分创建一个纹理视图,但是我不能在不让预览缩小的情况下做到这一点。

因此,在决定相机/屏幕比例的最佳分辨率以开始拍摄后,我可以获得相机拍摄高度和我想要显示的高度之间的比例。

mPreviewSize = chooseOptimalSize(...); 

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