当前位置: 代码迷 >> 综合 >> Android喜马拉雅集成之》图片高斯模糊的实现方法
  详细解决方案

Android喜马拉雅集成之》图片高斯模糊的实现方法

热度:22   发布时间:2024-02-22 14:34:09.0

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:25imageview.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 <= 25blur.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() {@Overridepublic void onSuccess() {Drawable drawable = mBgCoverIv.getDrawable();if (drawable != null) {ImageBlur.makeBlur(mBgCoverIv, XXXActivity.this);}}@Overridepublic void onError() {}});}

 

  相关解决方案