android 开发工具类-毛玻璃,高斯模糊效果
工具类代码如下:
Android studio 版本4.01:
使用到的工具类ImageBlur:
package com.hl.maya.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
import android.widget.ImageView;
/**
* 图片模糊
*/
public class ImageBlur {
public static void makeBlur(ImageView imageview, Context context) {
BitmapDrawable drawable = (BitmapDrawable) imageview.getDrawable();
Bitmap bitmap = drawable.getBitmap();
Bitmap blurred = blurRenderScript(bitmap, 10, context); //second parametre is radius max:25
imageview.setImageBitmap(blurred); //radius decide blur amount
}
private static Bitmap blurRenderScript(Bitmap smallBitmap, int radius, Context context) {
smallBitmap = RGB565toARGB888(smallBitmap);
Bitmap bitmap = Bitmap.createBitmap(smallBitmap.getWidth(), smallBitmap.getHeight(), Bitmap.Config.ARGB_8888);
RenderScript renderScript = RenderScript.create(context);
Allocation blurInput = Allocation.createFromBitmap(renderScript, smallBitmap);
Allocation blurOutput = Allocation.createFromBitmap(renderScript, bitmap);
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
blur.setInput(blurInput);
blur.setRadius(radius); // radius must be 0 < r <= 25
blur.forEach(blurOutput);
blurOutput.copyTo(bitmap);
renderScript.destroy();
return bitmap;
}
private static Bitmap RGB565toARGB888(Bitmap img) {
int numPixels = img.getWidth() * img.getHeight();
int[] pixels = new int[numPixels];
//Get JPEG pixels. Each int is the color values for one pixel.
img.getPixels(pixels, 0, img.getWidth(), 0, 0, img.getWidth(), img.getHeight());
//Create a Bitmap of the appropriate format.
Bitmap result = Bitmap.createBitmap(img.getWidth(), img.getHeight(), Bitmap.Config.ARGB_8888);
//Set RGB pixels.
result.setPixels(pixels, 0, result.getWidth(), 0, 0, result.getWidth(), result.getHeight());
return result;
}
}
用法,特别简单
静态方法,直接调用
如果是本地图片设置好图片以后,把ImageView和上下文传过来
如果是网络图片,怎么使用呢?
如果是网络图片也是一样的,这里我举个例子。
但是要进行判空,判断有没有把图片设置好
工具类的使用代码如下:
//实现方法一:
if (mBgCoverIv != null) {
Picasso.with(this).load(album.getCoverUrlLarge()).into(mBgCoverIv);
ImageBlur.makeBlur(mBgCoverIv,this);
}
//实现方法二:
if (mBgCoverIv != null) {
Picasso.with(this).load(album.getCoverUrlLarge()).into(mBgCoverIv, new Callback() {
@Override
public void onSuccess() {
Drawable drawable = mBgCoverIv.getDrawable();
if (drawable != null) {
ImageBlur.makeBlur(mBgCoverIv, XXXActivity.this);
}
}
@Override
public void onError() {
}
});
}