samsung - efecto bokeh en android
Android desenfoque vista de superficie utilizada en la cámara (3)
Tengo una vista previa de la cámara en mi aplicación de Android. Como todos ustedes probablemente saben, está implementado por una surfaceview
de surfaceview
en Android.
En mi aplicación de fotos, que permite a los usuarios tomar fotografías, quiero desenfocar la vista previa de la cámara (la vista de la superficie) si el usuario aún no ha iniciado sesión, si el usuario ha iniciado sesión, mostraré la vista previa normal (sin desenfoque)
Desenfoque como algo como
Pero parece que no hay manera de hacerlo.
Un par de cosas vienen a mi mente pero no estoy seguro de cómo lograrlo
- use una superposición de desenfoque y colóquela en la parte superior de la vista de superficie, pero ¿cómo se crea tal superposición de desenfoque?
otro enfoque es cambiar el atributo de la ventana, pero no puedo hacerlo para surfaceview,
getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
Entonces, ¿podemos crear una ventana sobre la vista de superficie y establecer la bandera de esa manera? No lo creo
alguien puede decirme cómo desenfocar una vista previa de la cámara, que es una vista de superficie
nota: estoy tratando de desenfocar un área que es la salida de la vista previa de la cámara, por lo que no es como si estuviera desenfocando una imagen estática, el área de desenfoque cambiará dependiendo de dónde apunta su cámara del teléfono
Aunque su segunda opción está perdiendo soporte en versiones posteriores del sistema operativo Android, puede ser una buena opción. surfaceview
en traer una ventana al FRENTE de tu surfaceview
de la surfaceview
, y usar la propiedad blur_behind de tu ahora nueva ventana del FRENTE.
Documentación de la API de Android " Esta constante quedó obsoleta en el nivel 14 de la API. Ya no se admite el desenfoque.
Bandera de la ventana: desenfoque todo detrás de esta ventana.
Valor constante: 4 (0x00000004) "
Tengo que admitir que no estoy 100% seguro de que esto funcione, pero definitivamente vale la pena intentarlo.
La mejor manera de hacer esto es tomar una captura de pantalla del control, aplicarle un desenfoque y luego mostrar esa imagen sobre la parte superior del control original. Así es como lo hace la aplicación yahoo weather y cómo Google sugiere que hagas cosas como esta.
Renderizar el script hace bluring rápido. También tengo un código, pero actualmente no está disponible.
Esto podría ayudar:
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/
También he leído que hay métodos integrados en Android que hacen esto, pero la API no es pública, por lo que no podemos usarla ... lo cual es una mierda.
Tienes que cambiar los parámetros de la cámara; en este caso con Camera.Parameters.setPictureSize()
.
El flujo de trabajo básico aquí es:
Camera.Parameters cp = mCamera.getParameters(); // get the current params
cp.set...(); // change something
mCamera.setParameters(cp); // write the params back
Asegúrese de que todas las resoluciones que configure a través de esta función sean compatibles. Puede obtener una lista de las resoluciones que se admiten en un dispositivo a través de Camera.Parameters.getSupportedPictureSizes()
. y compruebe esta documentación de la Camera .