首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android Java: Camera2预览图片被拉伸

Android Java: Camera2预览图片被拉伸
EN

Stack Overflow用户
提问于 2018-09-27 13:40:11
回答 1查看 1.7K关注 0票数 1

我目前正在使用camera2应用程序接口制作我的安卓应用程序。我能够制作图像,保存它们,编辑它们等等。但我的相机总是伸展。

我使用的是三星Galaxy Tab A和三星Galaxy Note 8,所以不是16:9的比例。

首先,我只在风景模式下拍照。

我的textureView与我的显示器大小完全相同。我的预览应该更好,因为我也使用它的大小来保存图像。但如果将它设置为与我的显示器相同的大小,我也会得到拉伸的图像。

代码语言:javascript
复制
            //getting the ratio, correct setting of sizes
        if (verh == sechzehnzuneun) {
            newSize = new Size(2300, 1350);
        } else if (verh == sechzehnzuzehn) {
            newSize = new Size(2400, 1500);
        } else if (verh == note8) {
            newSize = new Size(2792, 1440);
        }
//also used for saving
        _imageDimension = newSize;

        //used for rotating the preview, otherwise i geht some strange portrait camera 
Matrix matrix = new Matrix();
        int rotation = getWindowManager().getDefaultDisplay().getRotation();
        RectF textureRectF = new RectF(0, 0, _textureView.getWidth(), _textureView.getHeight());
        RectF previewRectF = new RectF(0, 0, _imageDimension.getHeight(), _imageDimension.getWidth());
        float centerX = textureRectF.centerX();
        float centerY = textureRectF.centerY();
        if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) {
            previewRectF.offset(centerX - previewRectF.centerX(),
                    centerY - previewRectF.centerY());
            matrix.setRectToRect(textureRectF, previewRectF, Matrix.ScaleToFit.FILL);
            float scale = Math.max((float) width / _imageDimension.getWidth(),
                    (float) height / _imageDimension.getHeight());
            matrix.postScale(scale, scale, centerX, centerY);
            matrix.postRotate(90 * (rotation - 2), centerX, centerY);
        } else {
            //neu weg wenn nicht
            previewRectF.offset(centerX - previewRectF.centerX(), centerY - previewRectF.centerY());
            matrix.setRectToRect(textureRectF, previewRectF, Matrix.ScaleToFit.FILL);
            float scale = Math.max((float)height / _imageDimension.getHeight(), (float)width / _imageDimension.getWidth());
            matrix.postScale(scale, scale,centerX,centerY);
            matrix.postRotate(0, centerX, centerY);
        }
        _textureView.setTransform(matrix);

我正在获取上层代码的if case。

但是看(只在肖像上看,没有方向变化,总是水平的)

在风景中寻找

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-28 04:24:39

你有没有看过谷歌的camera2应用示例中的AutoFitTextureView

不能特别保证摄像头设备支持设备的显示大小,如果不支持,则选择接近请求大小的大小。但这可能不会有相同的纵横比。

您需要选择相机设备实际支持的大小,然后将TextureView设置为匹配的纵横比。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52530104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档