gpt4 book ai didi

android - TextureView getBitmap() 忽略 setTransform

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

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

最佳答案

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

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

我解决了以下问题,它在拉出位图后应用相同的转换:

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 );

我确实注意到位图没有像在原始 View 中那样被裁剪。在我的例子中,TextureView 一直在裁剪图像的顶部和底部,而 Bitmap 仍然是全尺寸的。基本上,看起来 TextureView 默认使用“centerCrop”的等效项来显示原始源。我将相应的 ImageView 设置为使用 android:scaleType="centerCrop" 并且 View 具有相同的纵横比。

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

关于android - TextureView getBitmap() 忽略 setTransform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300975/

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