18

我的 android 应用程序中有一个相机预览。大家可能都知道它是由surfaceviewandroid 中的 a 实现的。

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

像这样模糊

在此处输入图像描述

但是好像没有办法

想到几件事,但我不知道如何实现它

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

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

那么我们可以创建一个覆盖surfaceview的窗口并像这样设置标志吗?我不这么认为

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

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

4

3 回答 3

2

尽管您的第二个选项在更高版本的 Android 操作系统中失去了支持,但它可能是一个不错的选择。我想在您的 FRONT 前面带一个窗口surfaceview,并使用您现在新的 IN FRONT 窗口的 blur_behind 属性。

Android API 文档“ 此常量在 API 级别 14 中已弃用。 不再支持模糊。

窗口标志:模糊此窗口后面的所有内容。

常数值:4 (0x00000004)"

我不得不承认,我不是 100% 肯定这会奏效,但它绝对值得一试。

于 2014-03-06T15:30:35.380 回答
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 不是公开的,所以我们不能使用它......这很糟糕。

于 2014-03-06T15:16:51.440 回答
-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()。并检查此相机文档。

于 2014-03-07T06:40:51.790 回答