Android-размытие поверхности изображения, используемое в камере

У меня есть предварительный просмотр камеры в приложении для Android. Как вы, наверное, знаете, это реализовано с помощью surfaceview в android.

В моем приложении для фотографий, которое позволяет пользователям делать снимки, я хочу размыть предварительный просмотр камеры (вид поверхности), если пользователь еще не вошел в систему, если пользователь вошел в систему, я покажу обычный просмотр (без размытие)

Размытие как нечто вроде enter image description here

Но, похоже, нет способа сделать это

Пара мне приходят в голову, но я не уверен, как ее достичь.

  • используйте наложение размытия и поместите его поверх поверхностного вида, но как создать u размытие наложения?
  • другой подход заключается в изменении атрибута окна, но я не могу сделать это для просмотра поверхности,

     getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
    

так что мы можем создать окно, наложенное на поверхность, и установить такой флаг? я так не думаю

может кто-нибудь сказать мне, как размыть предварительный просмотр камеры, который является видом поверхности

note: я пытаюсь размыть область, которая является ooutput из предварительного просмотра камеры, так что это не так, как я размываю статическое изображение, область размытия будет меняться в зависимости от того, где u point ur phone camera

Ответы

Ответ 1

Лучший способ сделать это - снять снимок экрана, применить к нему размытие, а затем показать это изображение поверх исходного элемента управления. Вот как это делает приложение погоды Yahoo, и как Google предлагает вам делать такие вещи.

Render script быстро смазывает. У меня также есть код, но он сейчас не под рукой.

Это может помочь:

http://blog.neteril.org/blog/2013/08/12/blurring-images-on-android http://docs.xamarin.com/recipes/android/other_ux/drawing/blur_an_image_with_renderscript/

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

Ответ 2

Хотя ваш второй вариант теряет поддержку в более поздних версиях ОС Android, это может быть хорошим вариантом. Я бы подумал принести окно IN FRONT вашего surfaceview и использовать свойство blur_behind вашего теперь нового окна IN FRONT.

Документация по API Android " Эта константа была устарела в уровне API 14.  Размытие больше не поддерживается.

Флаг окна: размыть все за этим окном.

Постоянное значение: 4 (0x00000004) "

Я должен признать, что я не уверен на 100%, что это сработает, но его определенно стоит попробовать.

Ответ 3

Вам нужно изменить параметры камеры; в этом случае с Camera.Parameters.setPictureSize().

Основной рабочий процесс здесь:

Camera.Parameters cp = mCamera.getParameters(); // get the current params
cp.set...(); // change something
mCamera.setParameters(cp); // write the params back

Убедитесь, что каждое разрешение, установленное с помощью этой функции, поддерживается. Вы можете получить список разрешений, поддерживаемых устройством через Camera.Parameters.getSupportedPictureSizes(). и проверьте эту Camera документацию.