Android模糊surfaceview用于相机

时间:2013-03-22 08:08:47

标签: android android-camera surfaceview blur

我的Android应用中有相机预览。你可能都知道它是由android中的surfaceview实现的。

在我允许用户拍照的照片应用中,如果用户尚未登录,我想模糊相机预览(表面视图),如果用户已登录,我将显示正常预览(无模糊)

模糊enter image description here

之类的东西

但似乎无法做到这一点

有些事情浮现在脑海中,但我不确定如何实现它

  1. 使用模糊叠加并将其放置在曲面视图的顶部,但是如何创建这样的模糊叠加?
  2. 另一种方法是更改​​窗口的属性,但我无法对surfaceview进行更改,

     getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
    
  3. 那么我们可以创建一个窗口覆盖surfaceview并设置这样的标志吗?我不这么认为

    有人可以告诉我如何模糊相机预览,这是一个表面视图

    注意:我正在尝试模糊一个区域,这是相机预览的输出,所以它不像我模糊静态图像,模糊区域将根据你指向手机相机的位置而改变

3 个答案:

答案 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文档。