я попробовал функцию увеличения масштаба для изображения из этого. Он отлично работает, но как я могу реализовать масштабирование функция предварительного просмотра камеры. Пожалуйста помогите. Заранее спасибо...
Как реализовать функцию масштабирования для предварительного просмотра камеры
Ответы (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
это работает, но необходимо добавить строку для данных этого члена: private float mDist;
- person user3290180; 18.05.2015
ссылка мертва для контента github!
- person Mayur R. Amipara; 21.07.2015
работает отлично .. хорошая работа .. thnxx !
- person Mayur R. Amipara; 21.07.2015
спасибо :) работает для меня
- person Nininea; 13.09.2016
ссылка выше не работает
- person Dharmendra; 05.10.2016
Я скопировал / вставил соответствующие части
- person mtbomb; 05.10.2016
потерял ясность после добавления этого
- person Uma Achanta; 14.06.2017
добавить полный код
- person Uma Achanta; 14.06.2017
@UmaAchanta полный код доступен по ссылке на github.
- person mtbomb; 15.06.2017
После добавления этого в мой код я потерял событие щелчка на кнопке, а также текст редактирования.
- person Vishal Vaishnav; 24.08.2017
работает хорошо. единственное изменение, которое я в итоге сделал, это сделать зум при щипке немного более чувствительным
- person dollardime; 07.02.2020