Как реализовать функцию масштабирования для предварительного просмотра камеры

я попробовал функцию увеличения масштаба для изображения из этого. Он отлично работает, но как я могу реализовать масштабирование функция предварительного просмотра камеры. Пожалуйста помогите. Заранее спасибо...


person ultimate    schedule 03.09.2013    source источник


Ответы (1)


Это то, что я использовал, чтобы добавить щипок для увеличения. Ссылка на код находится здесь: https://github.com/maxtower/AndroidDocumentScanner/blob/master/app/src/main/java/com/martin/opencv4android/CameraPreview.java

private SurfaceHolder mHolder;
private Camera mCamera;
float mDist = 0;

@Override
public boolean onTouchEvent(MotionEvent event) {
    // Get the pointer ID
    Camera.Parameters params = mCamera.getParameters();
    int action = event.getAction();


    if (event.getPointerCount() > 1) {
        // handle multi-touch events
        if (action == MotionEvent.ACTION_POINTER_DOWN) {
            mDist = getFingerSpacing(event);
        } else if (action == MotionEvent.ACTION_MOVE && params.isZoomSupported()) {
            mCamera.cancelAutoFocus();
            handleZoom(event, params);
        }
    } else {
        // handle single touch events
        if (action == MotionEvent.ACTION_UP) {
            handleFocus(event, params);
        }
    }
    return true;
}

private void handleZoom(MotionEvent event, Camera.Parameters params) {
    int maxZoom = params.getMaxZoom();
    int zoom = params.getZoom();
    float newDist = getFingerSpacing(event);
    if (newDist > mDist) {
        //zoom in
        if (zoom < maxZoom)
            zoom++;
    } else if (newDist < mDist) {
        //zoom out
        if (zoom > 0)
            zoom--;
    }
    mDist = newDist;
    params.setZoom(zoom);
    mCamera.setParameters(params);
}

public void handleFocus(MotionEvent event, Camera.Parameters params) {
    int pointerId = event.getPointerId(0);
    int pointerIndex = event.findPointerIndex(pointerId);
    // Get the pointer's current position
    float x = event.getX(pointerIndex);
    float y = event.getY(pointerIndex);

    List<String> supportedFocusModes = params.getSupportedFocusModes();
    if (supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
        mCamera.autoFocus(new Camera.AutoFocusCallback() {
            @Override
            public void onAutoFocus(boolean b, Camera camera) {
                // currently set to auto-focus on single touch
            }
        });
    }
}

/** Determine the space between the first two fingers */
private float getFingerSpacing(MotionEvent event) {
    // ...
    float x = event.getX(0) - event.getX(1);
    float y = event.getY(0) - event.getY(1);
    return (float)Math.sqrt(x * x + y * y);
}
person mtbomb    schedule 23.06.2014
comment
это работает, но необходимо добавить строку для данных этого члена: private float mDist; - person user3290180; 18.05.2015
comment
ссылка мертва для контента github! - person Mayur R. Amipara; 21.07.2015
comment
работает отлично .. хорошая работа .. thnxx ! - person Mayur R. Amipara; 21.07.2015
comment
спасибо :) работает для меня - person Nininea; 13.09.2016
comment
ссылка выше не работает - person Dharmendra; 05.10.2016
comment
Я скопировал / вставил соответствующие части - person mtbomb; 05.10.2016
comment
потерял ясность после добавления этого - person Uma Achanta; 14.06.2017
comment
добавить полный код - person Uma Achanta; 14.06.2017
comment
@UmaAchanta полный код доступен по ссылке на github. - person mtbomb; 15.06.2017
comment
После добавления этого в мой код я потерял событие щелчка на кнопке, а также текст редактирования. - person Vishal Vaishnav; 24.08.2017
comment
работает хорошо. единственное изменение, которое я в итоге сделал, это сделать зум при щипке немного более чувствительным - person dollardime; 07.02.2020