Android TextureView getBitmap()忽略setTransform

Android TextureView getBitmap()忽略setTransform,android,camera,Android,Camera,我正在使用TextureView进行CameraPreview。由于显示比率和预览比率之间存在差异,我使用onSurfaceTextureAvailable()中的TextReview.setTransform(matrix)来缩放预览。当我需要textureView的屏幕截图时,我会使用textureView.getBitmap(),但在某些型号的智能手机中,getBitmap()会忽略预览的缩放。为什么会发生这种情况?当我需要在显示相机预览之前对其进行后期处理时,我发现了同样的问题 看起来原

我正在使用TextureView进行CameraPreview。由于显示比率和预览比率之间存在差异,我使用
onSurfaceTextureAvailable()
中的
TextReview.setTransform(matrix)
来缩放预览。当我需要textureView的屏幕截图时,我会使用
textureView.getBitmap()
,但在某些型号的智能手机中,
getBitmap()
会忽略预览的缩放。为什么会发生这种情况?

当我需要在显示相机预览之前对其进行后期处理时,我发现了同样的问题

看起来原始相机捕获是在getBitmap()中显示的,而不是最终显示的转换视图

我用以下方法解决了这个问题,它在位图被拉出后应用了相同的变换:

TextureView textureView = (TextureView) findViewById( R.id.texture );
Matrix m = new Matrix();
// Do matrix creation here.
textureView.setTransform( m );

// When you need to get the Bitmap
Bitmap bitmap = textureView.getBitmap();
bitmap = Bitmap.createBitmap( bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), textureView.getTransform( null ), true );
我注意到位图没有像原始视图中那样被裁剪。在我的例子中,TextureView裁剪了图像的顶部和底部,而位图仍然是全尺寸的。基本上,默认情况下,TextureView使用与“centerCrop”等效的方法显示原始源。我将相应的ImageView设置为使用android:scaleType=“centerCrop”,并且这些视图具有相同的外观


当然,这意味着我正在处理更多我真正需要的图像,但我还没有弄清楚如何在处理之前准确地裁剪出TextureView正在做什么。

这是不正确的,在我的三星手机上,getBitmap返回相机拍摄的图像,但在华为手机上,它返回转换后的图像。。。现在尝试找到一个解决方案实际上这个解决方案确实有效,但是速度非常慢,使用它进行相机预览帧捕获是不可能的。在1080p或更高版本上运行时,内存会立即爆炸…@AngryDuck+1它非常慢