Intereting Posts
Изображения не загружаются в Fresco Android Honeycomb: NetworkOnMainThreadException даже при использовании AsyncTask и без строгого режима? Android – всплывающее меню, когда нажата кнопка списка? RuntimeException на Camera.setParameters () на nexus one Как создать bouncable scrollview в android? Как я могу запрограммировать вращающуюся круговую анимацию, такую ​​как эта (прикрепленная фотография)? Android Возможно ли обмен сообщениями между двумя устройствами Android через Wi-Fi? Говорящий проект не использует систему построения градиента, когда она Google TV – разрабатывает для эффективности так же важно, как и с телефонами / планшетами? Catch all type exceptions для программирования Android Уведомления Firebase (FCM) не появляются, когда приложение Android отключено из последнего лотка Как вы можете получить адрес электронной почты пользователя Android? Как выполнить файл dex в android с помощью команды? Что такое рекламная и функциональная графика в Android Market / Play Store? Как установить контент в линейном макете на BOTTOM экрана в Android.?

Камера для Android – просмотр изображений при записи видео

Я пытался понять это на некоторое время, но по какой-то причине, когда я начинаю записывать видео с камерой, предварительный просмотр приближается. У меня есть следующий код из некоторых примеров:

@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Camera.Parameters myParameters = mCamera.getParameters(); List<Camera.Size> sizes = myParameters.getSupportedPreviewSizes(); Camera.Size myBestSize = getBestPreviewSize(sizes, width, height); if (myBestSize != null) { myParameters.setPreviewSize(myBestSize.width, myBestSize.height); myParameters.setVideoStabilization(false); mCamera.setParameters(myParameters); mCamera.startPreview(); mCamera.unlock(); } } private Camera.Size getBestPreviewSize(List<Camera.Size> sizes, int width, int height) { final double ASPECT_TOLERANCE = 0.05; double targetRatio = (double) width / height; if (sizes == null) return null; Camera.Size optimalSize = null; double minDiff = Double.MAX_VALUE; int targetHeight = height; // Find size for (Camera.Size size : sizes) { double ratio = (double) size.width / size.height; if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } if (optimalSize == null) { minDiff = Double.MAX_VALUE; for (Camera.Size size : sizes) { if (Math.abs(size.height - targetHeight) < minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } return optimalSize; } 

Но предварительный просмотр по-прежнему масштабируется при записи видео. Я попытался вручную установить размер предварительного просмотра на 1280×720, однако он не работает на всех проверенных мной устройствах, некоторые из них показывают черный SurfaceView.

Есть ли способ предотвратить просмотр предварительного просмотра при записи видео? Ни одно из решений здесь, в StackOverflow, похоже, не работает.

EDIT: Я попытался создать пользовательский SurfaceView со своим собственным методом onMesaure, но теперь я получаю ошибку -19 при запуске MediaRecorder. (Не обращайте внимания на -16 в щедрости)

Solutions Collecting From Web of "Камера для Android – просмотр изображений при записи видео"

Я смущен тем видом масштабирования, о котором вы говорите, может быть программным увеличением или автофокусом, возможно, поэтому я предлагаю различные потенциальные советы, ведущие к окончательному решению:

  1. Реализовать mCamera.setZoomChangeListener, например:

     mCamera.setZoomChangeListener(new Camera.OnZoomChangeListener() { @Override public void onZoomChange(int i, boolean b, Camera camera) { Log.e("StackOverflow","Zoom just changed !"); // Inspect things from here } }); 
  2. Отключите плавное масштабирование:

     mCamera.stopSmoothZoom(); // My device doesn't support it, but maybe your device does 
  3. Осмотрите все свои камеры. Параметры:

     Log.e("StackOverflow", "All Camera parameters :"); for(String s : mCamera.getParameters().flatten().split(";")) Log.e("StackOverflow", s + "\n"); 
  4. Затем переключите все, что может быть связано с увеличением, например:

     Camera.Parameters parameters = mCamera.getParameters(); parameters.setZoom(100); // My device support some values in the range 100 | 400 parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY); parameters.setVideoStabilization(false); // Don't forget to add the new parameters to the camera : mCamera.setParameters(parameters); 

С уважением