초코우유랑
22
2021-05-04 17:40:33
0
66

안드로이드 camera2 사용 해보신 적 있으신 분 계신가요?


안녕하세요! camera2를 사용하여 카메라 어플을 만들어보고 있습니다!

preview를 AutoFitTextureView를 이용하여 비율 조정을 하고 있는데, 비율은 맞게 나타나는데 약간 늘려지거나 어그러져서 나타나네요 ㅠㅠ 사진 찍으면 그건 비율에 맞게 제대로 나와요! 혹시 조정을 하려면 어떻게 해야 하는지 알고 계시는 분 계실까요? 카메라 자체에서 비율에 맞게 확대 혹은 크롭을 해야하는거 같은데.. AutoFitTextureView 내에서는 해결이 불가능 할까요? 혹시 간단한 힌트라도 주실 수 있으실 분 계실지요...ㅠㅠㅠㅠㅠ



/*
 * Copyright 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package kr.co.simplebestapp.nosoundcamera;

import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.TextureView;
import android.view.WindowManager;

/**
 * A {@link TextureView} that can be adjusted to a specified aspect ratio.
 */
public class AutoFitTextureView extends TextureView {

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

    public AutoFitTextureView(Context context) {
        this(context, null);
    }

    public AutoFitTextureView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public AutoFitTextureView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    /**
     * Sets the aspect ratio for this view. The size of the view will be measured based on the ratio
     * calculated from the parameters. Note that the actual sizes of parameters don't matter, that
     * is, calling setAspectRatio(2, 3) and setAspectRatio(4, 6) make the same result.
     *
     * @param width  Relative horizontal size
     * @param height Relative vertical size
     */
    public void setAspectRatio(int width, int height) {
        if (width < 0 || height < 0) {
            throw new IllegalArgumentException("Size cannot be negative.");
        }
        mRatioWidth = width;
        Log.e("mRatioWidth", String.valueOf(mRatioWidth));
        mRatioHeight = height;
        Log.e("mRatioHeight", String.valueOf(mRatioHeight));
        requestLayout();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int width = MeasureSpec.getSize(widthMeasureSpec);
        Log.e("width", String.valueOf(width));
        int height = MeasureSpec.getSize(heightMeasureSpec);
        Log.e("height", String.valueOf(height));
        if (0 == mRatioWidth || 0 == mRatioHeight) {
            setMeasuredDimension(width, height);
        } else {
            if (width < height * mRatioWidth / mRatioHeight) {
                setMeasuredDimension(width, width * mRatioHeight / mRatioWidth);
                Log.e("setMeasuredDimension1", width + " , " + width * mRatioHeight / mRatioWidth);
            } else {
                setMeasuredDimension(height * mRatioWidth / mRatioHeight, height);
                Log.e("setMeasuredDimension2", height * mRatioHeight / mRatioWidth + " , " + height);
            }
        }
    }
}


혹시 몰라서 올리는 AutoFitTextureView 코드입니다! 제가 아직 많이 미숙해서ㅠㅠㅠ 이해 부탁드려요.. 감사합니다!!

0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.