我的Android应用中有相机预览。你可能都知道它是由android中的surfaceview
实现的。
在我允许用户拍照的照片应用中,如果用户尚未登录,我想模糊相机预览(表面视图),如果用户已登录,我将显示正常预览(无模糊)
模糊
之类的东西但似乎无法做到这一点
有些事情浮现在脑海中,但我不确定如何实现它
另一种方法是更改窗口的属性,但我无法对surfaceview进行更改,
getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
那么我们可以创建一个窗口覆盖surfaceview并设置这样的标志吗?我不这么认为
有人可以告诉我如何模糊相机预览,这是一个表面视图
注意:我正在尝试模糊一个区域,这是相机预览的输出,所以它不像我模糊静态图像,模糊区域将根据你指向手机相机的位置而改变
答案 0 :(得分:2)
执行此操作的最佳方法是拍摄控件的屏幕截图,对其应用模糊,然后在原始控件的顶部显示该图像。雅虎天气应用程序就是这样做的,谷歌建议你做这样的事情。
渲染脚本快速模糊。我也有一些代码,但现在还没有。
这些可能会有所帮助:
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不公开,所以我们不能使用它......这很糟糕。
答案 1 :(得分:2)
尽管您的第二个选项在Android OS的更高版本中失去了支持,但它可能是一个不错的选择。我想在你surfaceview
的前面带一个窗口,并使用你现在新的前框窗口的blur_behind属性。
Android API文档 “ 此常量已在API级别14中弃用。 不再支持模糊。
窗口标记:模糊此窗口后面的所有内容。
常数值:4(0x00000004)“
我不得不承认,我不是百分百肯定这会起作用,但绝对值得一试。
答案 2 :(得分:-4)
您必须更改相机参数;在这种情况下使用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文档。