相机中使用的Android模糊surfaceview

Posted

技术标签:

【中文标题】相机中使用的Android模糊surfaceview【英文标题】:Android blur surfaceview used in camera 【发布时间】:2013-03-12 00:37:32 【问题描述】:

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

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

像这样模糊

但是好像没办法

想到了一些事情,但我不知道如何实现它

    使用模糊叠加并将其放置在表面视图的顶部,但是您如何创建这样的模糊叠加?

    另一种方法是改变窗口的属性,但是我不能做到surfaceview

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

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

谁能告诉我如何模糊相机预览,这是一个表面视图

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

【问题讨论】:

我不确定这是不是内置的,你可能需要处理每一帧:***.com/questions/8620560/video-processing-in-android 也许在相机表面视图上方添加透明模糊图像对您来说会是一个更简单的解决方案? 嗨,伙计...您有任何适当的解决方案吗?...因为我面临同样的问题... 【参考方案1】:

最好的方法是截取控件的屏幕截图,对其应用模糊处理,然后在原始控件的顶部显示该图像。这就是雅虎天气应用程序的工作方式以及谷歌建议您执行此类操作的方式。

渲染脚本会快速模糊。我也有一些代码,但现在手头没有。

这些可能会有所帮助:

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 不是公开的,所以我们不能使用它......这太糟糕了。

【讨论】:

虽然我认为这可行,但遗憾的是它只在 API 级别 17 中添加,而我个人在 API 级别 16 中需要它。【参考方案2】:

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

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

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

常数值:4 (0x00000004)"

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

【讨论】:

像你说的那样被弃用有点冒险,很遗憾没有从 API 级别 14 实施替代方案:(。【参考方案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 文档。

【讨论】:

以上是关于相机中使用的Android模糊surfaceview的主要内容,如果未能解决你的问题,请参考以下文章

Objective C中iOS的图像模糊检测

Android 相机预览在预览中拉伸,而不是在拍照后

用于相机的具有透明度的矩形框架

android 相机 怎么改变相机预览界面大小

Android - 裁剪图像放大很多,看起来很模糊

opencv for android中使用照相机前置摄像头是照片是颠倒的?