簡體   English   中英

Android Java:將Camera2預覽圖像拉伸

[英]Android Java: Camera2 preview image is stretched

我目前正在使用camera2 API開發我的android應用。 我能夠制作圖像,保存圖像,編輯圖像等等。 但是我的相機總是拉長的。

我正在使用Samsung Galaxy Tab A和Samsung Galaxy Note 8,而不是16:9的比例。

首先,我只在橫向模式下拍照。

我的textureView與我的顯示器大小完全相同。 我的預覽效果會更好,因為我也使用它的大小來保存圖像。 但是,如果將其設置為與我的顯示器相同的尺寸,則會得到拉伸圖像。

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

我正在上代碼的情況下。

但是請看(僅以縱向看,但方向沒有變化,始終是水平的)

但是,請看(僅縱向查看,但方向不變,始終水平):

看風景

看風景

您是否在Google的示例camera2應用程序中查看了AutoFitTextureView

沒有特別保證相機設備完全支持設備的顯示尺寸,如果不支持,則選擇接近要求尺寸的尺寸。 但這可能不會具有相同的縱橫比。

您需要選擇相機設備實際支持的尺寸,然后將TextureView設置為匹配的寬高比。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM