android+动态模糊效果,Android 动态高斯模糊效果教程

写在前面

最近一直在做毕设项目的准备工作,考虑到可能要用到一个模糊的效果,所以就学习了一些高斯模糊效果的实现。比较有名的就是 FastBlur 以及它衍生的一些优化方案,还有就是今天要说的RenderScript 。

因为这东西是现在需要才去学习的,所以关于一些图像处理和渲染问题就不提了。不过在使用的过程中确实能感受到,虽然不同的方案都能实现相同的模糊效果,但是效率差别真的很大。

本篇文章实现的高斯模糊是根据下面这篇文章学习的,先推荐一下。本文内容与其内容差不多,只是稍微讲的详细一点,并修改了代码中部分实现逻辑和细节上的处理。不过主体内容不变,所以选择哪篇文章去学都是一样的。

下面就来看一下,如何去实现这样的高斯模糊效果。

92376c4e6aed159ea66bfd8d92969935.png

简单聊聊 Renderscript

因为效果的实现是基于 Renderscript 的,所以有必要先来了解一下。

从它的官方文档来看,说的很是玄乎。我们只需要知道一点就好了:

RenderScript is a framework for running computationally intensive tasks at high performance on Android.

Renderscript 是 Android 平台上进行高性能计算的框架。

既然是高性能计算,那么说明 RenderScript 对图像的处理非常强大,所以用它来实现高斯模糊还是比较好的选择。

那么如何使用它呢?从官方文档中可以看到,如果需要在 Java 代码中使用 Renderscript 的话,就必须依赖 android.renderscript 或者android.support.v8.renderscript 中的 API 。既然有 API 那就好办多了。

下面简单说一下使用的步骤,这也是官方文档中的说明:

首先需要通过 Context 创建一个 Renderscript ;

其次通过创建的 Renderscript 来创建一个自己需要的脚本( ScriptIntrinsic ),比如这里需要模糊,那就是 ScriptIntrinsicBlur ;

然后至少创建一个 Allocation 类来创建、分配内存空间;

接着就是对图像进行一些处理,比如说模糊处理;

处理完成后,需要刚才的 Allocation 类来填充分配好的内存空间;

最后可以选择性的对一些资源进行回收。

文档中的解释永远很规矩,比较难懂,我们结合原博主 湫水长天 的代码来看一看步骤:

/**

* @author Qiushui

* @description 模糊图片工具类

* @revision Xiarui 16.09.05

*/

public class BlurBitmapUtil {

//图片缩放比例

private static final float BITMAP_SCALE = 0.4f;

/**

* 模糊图片的具体方法

*

* @param context 上下文对象

* @param image 需要模糊的图片

* @return 模糊处理后的图片

*/

public static Bitmap blurBitmap(Context context, Bitmap image,float blurRadius) {

// 计算图片缩小后的长宽

int width = Math.round(image.getWidth() * BITMAP_SCALE);

int height = Math.round(image.getHeight() * BITMAP_SCALE);

// 将缩小后的图片做为预渲染的图片

Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);

// 创建一张渲染后的输出图片

Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

// 创建RenderScript内核对象

RenderScript rs = RenderScript.create(context);

// 创建一个模糊效果的RenderScript的工具对象

ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));

// 由于RenderScript并没有使用VM来分配内存,所以需要使用Allocation类来创建和分配内存空间

<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中实现高斯模糊效果有多种方式。一种常用的方式是使用Glide库来加载图片并应用高斯模糊转换。通过使用`bitmapTransform`方法和`BlurTransformation`类,可以将图片进行高斯模糊处理。例如,可以使用以下代码实现高斯模糊效果: ```java Glide.with(this) .load(R.mipmap.image) .apply(bitmapTransform(new BlurTransformation(100))) .into(blurIv); ``` 另一种方式是通过手势滑动来实现动态高斯模糊效果。可以通过监听触摸事件,在滑动过程中改变模糊图片的alpha值来达到不同程度的模糊效果。例如,可以使用以下代码实现: ```java mBlurImage.setOnTouchListener(new OnTouchListener() { private float mLastY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLastY = event.getY(); break; case MotionEvent.ACTION_MOVE: float y = event.getY(); float alphaDelt = (y - mLastY) / 1000; float alpha = mBlurImage.getAlpha() + alphaDelt; if (alpha > 1.0) { alpha = 1.0f; } else if (alpha < 0.0) { alpha = 0.0f; } mTextView.setText(String.valueOf(alpha)); mBlurImage.setAlpha(alpha); break; case MotionEvent.ACTION_UP: break; } return true; } }); ``` 总结来说,Android中实现高斯模糊效果可以使用Glide库进行静态处理,也可以通过手势滑动来实现动态效果。具体选择哪种方式取决于实际需求和开发者的偏好。\[2\]\[3\] #### 引用[.reference_title] - *1* [Android12 支持高斯模糊高斯模糊原理](https://blog.csdn.net/u012165769/article/details/120888709)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [android高斯模糊](https://blog.csdn.net/u014709812/article/details/51564856)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Android多种方式实现高斯模糊效果](https://blog.csdn.net/u012556114/article/details/81871578)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值