Android实现图片的高斯模糊(两种方式)

原文地址:http://www.jb51.net/article/107482.htm


在市面上很多的APP都使用了对图片作模糊化处理后作为背景的效果,来使得整个页面更具有整体感。如下就是网易云音乐的音乐播放页面:

很明显这个页面的背景是由中间的小图片模糊化后而来的。最常用的模糊化处理就是高斯模糊。

高斯模糊的几种实现方式:

(1)RenderScript

RenderScript是Google在Android 3.0(API 11)中引入的一个高性能图片处理框架。

使用RenderScriprt实现高斯模糊:

首先在在build.gradle的defaultConfig中添加RenderScript的使用配置

renderscriptTargetApi 24
renderscriptSupportModeEnabled true

renderscriptTargetApi :

指定要生成的字节码版本。我们(Goole官方)建议您将此值设置为最低API级别能够提供所有的功能,你使用和设置renderscriptSupportModeEnabled为true。此设置的有效值是从11到
最近发布的API级别的任何整数值。

renderscriptSupportModeEnabled:

指定生成的字节码应该回落到一个兼容的版本,如果运行的设备不支持目标版本。

下面就是使用RenderScriprt实现高斯模糊的方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static Bitmap blurBitmap(Context context, Bitmap bitmap) {
  //用需要创建高斯模糊bitmap创建一个空的bitmap
Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
  // 初始化Renderscript,该类提供了RenderScript context,创建其他RS类之前必须先创建这个类,其控制RenderScript的初始化,资源管理及释放
  RenderScript rs = RenderScript.create(context);
  // 创建高斯模糊对象
  ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
  // 创建Allocations,此类是将数据传递给RenderScript内核的主要方 法,并制定一个后备类型存储给定类型
  Allocation allIn = Allocation.createFromBitmap(rs, bitmap);
  Allocation allOut = Allocation.createFromBitmap(rs, outBitmap);
  //设定模糊度(注:Radius最大只能设置25.f)
  blurScript.setRadius( 15 .f);
  // Perform the Renderscript
  blurScript.setInput(allIn);
  blurScript.forEach(allOut);
  // Copy the final bitmap created by the out Allocation to the outBitmap
  allOut.copyTo(outBitmap);
  // recycle the original bitmap
  // bitmap.recycle();
  // After finishing everything, we destroy the Renderscript.
  rs.destroy();
  return outBitmap;
  }

(2)Glide实现高斯模糊

Glide是一个比较强大也是比较常用的一个图片加载库,Glide中的Transformations用于在图片显示前对图片进行处理。glide-transformations 这个库为Glide提供了多种多样的 Transformations实
现,其中就包括高斯模糊的实现BlurTransformation

?
1
2
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'jp.wasabeef:glide-transformations:2.0.1'

 通过这两个库的结合使用,就可以使用其中的BlurTransformation实现图片的高斯模糊

?
1
Glide.with(context).load(R.drawable.defalut_photo).bitmapTransform( new BlurTransformation(context, radius)).into(mImageView);

其中radius的取值范围是1-25,radius越大,模糊度越高。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中可以使用RenderScript库实现高斯模糊效果,同时结合GradientDrawable实现渐变效果。具体实现步骤如下: 1.在build.gradle文件中添加RenderScript支持: ``` defaultConfig { // ... renderscriptTargetApi 19 renderscriptSupportModeEnabled true } ``` 2.创建RenderScript对象: ``` RenderScript rs = RenderScript.create(context); ``` 3.创建高斯模糊脚本: ``` ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); ``` 4.设置高斯模糊半径: ``` blurScript.setRadius(radius); ``` 其中radius是半径值,越大模糊效果越强。 5.将Bitmap转换为RenderScript的Allocation对象: ``` Allocation input = Allocation.createFromBitmap(rs, bitmap); ``` 6.创建一个输出Allocation对象: ``` Allocation output = Allocation.createTyped(rs, input.getType()); ``` 7.在RenderScript中处理图像: ``` blurScript.setInput(input); blurScript.forEach(output); ``` 8.将处理后的图像从Allocation对象中复制到Bitmap中: ``` output.copyTo(bitmap); ``` 9.使用GradientDrawable创建渐变背景: ``` GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] {startColor, endColor}); ``` 其中startColor和endColor是起始和结束颜色。 10.将Bitmap设置为View的背景: ``` view.setBackground(new BitmapDrawable(context.getResources(), bitmap)); ``` 完整的代码示例: ``` RenderScript rs = RenderScript.create(context); ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); blurScript.setRadius(radius); Allocation input = Allocation.createFromBitmap(rs, bitmap); Allocation output = Allocation.createTyped(rs, input.getType()); blurScript.setInput(input); blurScript.forEach(output); output.copyTo(bitmap); GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] {startColor, endColor}); view.setBackground(new BitmapDrawable(context.getResources(), bitmap)); ``` 注意:以上代码仅为示例,具体实现可能需要根据项目需求进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值