簡體   English   中英

camera2捕獲與預覽不同的圖像

[英]camera2 capture image different with preview

我的拍攝圖片輸出與橫向模式下的相機預覽不一樣

  1. cpture之前 捕獲前

  2. 捕獲后

捕獲后

怎么了 ? 我該怎么辦。 謝謝

這是我從Google示例中提取的AutoFitTextView類。 您可以在這里看看。 它旨在顯示攝像機視圖並根據設備的物理尺寸配置比率。

public class AutoFitTextureView extends TextureView {

    private int mRatioWidth = 0;
    private int mRatioHeight = 0;

    // Some codes here...

    public void setAspectRatio(int width, int height) {
        if (width < 0 || height < 0) {
            throw new IllegalArgumentException("Size cannot be negative.");
        }
        mRatioWidth = width;
        mRatioHeight = height;
        requestLayout();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        if (0 == mRatioWidth || 0 == mRatioHeight) {
            setMeasuredDimension(width, height);
        } else {
            if (width < height * mRatioWidth / mRatioHeight) {
                setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
            } else {
                setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
            }
        }
    }
}

本課程有2分:

  1. 您無法確保該比率在每個設備上都能正常運行 但是,我們可以選擇它在這個已經定義了優化的大小
  2. 此條件是錯誤的: if (width < height * mRatioWidth / mRatioHeight) 應該是>,因為當寬度大於高度時,我們將基於寬度(而非高度)計算並設置度量尺寸。

更新

如果您只是希望每個設備都能以特定的比率正常工作,請為其設置硬比率(例如:4/3)

您可以通過替換以下代碼行來實現:

mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class),
                        rotatedPreviewWidth, rotatedPreviewHeight, maxPreviewWidth,
                        maxPreviewHeight, largest);

-> previewSize = Size(4, 3)

暫無
暫無

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

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