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 документацию.