gpt4 book ai didi

android - TextureView TranslationX & Y 在 API 23 上不是预期的行为

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

目前我正在制作一个带有 textureview 的相机播放器来渲染我的相机。因为预览可以有任何维度,所以我创建了一些自定义代码来在调用 OnSurfaceTextureUpdated 时更改纹理 View :

    void updateTextureMatrix(int width, int height) {
Display display = WindowManager.DefaultDisplay;
var isPortrait = (display.Rotation == SurfaceOrientation.Rotation0 || display.Rotation == SurfaceOrientation.Rotation180);

int previewWidth = orgPreviewWidth;
int previewHeight = orgPreviewHeight;

if(isPortrait) {
previewWidth = orgPreviewHeight;
previewHeight = orgPreviewWidth;
}

// determine which part to crop
float widthRatio = (float)width / previewWidth;
float heightRatio = (float)height / previewHeight;

float scaleX;
float scaleY;

if(widthRatio > heightRatio) {
// height must be cropped
scaleX = 1;
scaleY = widthRatio * ((float)previewHeight / height);
} else {
// width must be cropped
scaleX = heightRatio * ((float)previewWidth / width);
scaleY = 1;
}

Android.Graphics.Matrix matrix = new Android.Graphics.Matrix();

matrix.SetScale(scaleX, scaleY);
_textureView.SetTransform(matrix);

float scaledWidth = width * scaleX;
float scaledHeight = height * scaleY;

float dx = (width - scaledWidth) * 0.5f;
float dy = (height - scaledHeight) * 0.5f;
_textureView.TranslationX = dx;
_textureView.TranslationY = dy;
}

dxdy 的缩放和计算在旧版 android 设备上工作得很好,但我使用的 API 级别 23 的设备会抛出意外行为。

galaxy S3 正确显示: Galaxy S3

但是在 S7 上: S7

尽管定位正确,但手机还是截断了很多图像。这让我相信底部部分没有在旧设备上呈现。任何人都可以确认这一点并指出我正确的位置来解决这个问题吗?

最佳答案

经过长时间的测试,我发现问题出在 SetTransform 方法上。我正在使用矩阵设置我的比例,但这以某种方式渲染了我的纹理并忽略了 TranslationXTranslationY。删除矩阵并将其替换为float scaledWidth = width * scaleX; float scaledHeight = height * scaleY;

        float dx = (width - scaledWidth) * 0.5f;
float dy = (height - scaledHeight) * 0.5f;
_textureView.ScaleX = scaleX;
_textureView.ScaleY = scaleY;
_textureView.TranslationX = dx;
_textureView.TranslationY = dy;

修复了我在某些安卓设备上渲染错误的问题。

关于android - TextureView TranslationX & Y 在 API 23 上不是预期的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42095078/

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