zoukankan      html  css  js  c++  java
  • Android项目实战(五十七):Glide 高斯模糊效果

    核心需要高斯模糊的库

    compile 'jp.wasabeef:glide-transformations:2.0.1'

    针对于3.7的版本 

    使用方法为:

    //加载背景,
                Glide.with(MusicPlayerActivity.this)
                        .load(service.getImageUri())
                        .dontAnimate()
                        .error(R.drawable.no_music_rotate_img)
                        // 设置高斯模糊,模糊程度(最大25)  缩放比例
                        .bitmapTransform(new BlurTransformation(this, 14, 3))
                        .into(allBg);

    针对4.+

    Glide.with(context)
                    .load(url)
                    .apply(RequestOptions.bitmapTransform(new BlurTransformation(25,8)))
                    .into(view);                        
    BlurTransformation 类源码:
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Paint;
    import android.support.annotation.NonNull;
    
    import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
    import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
    
    import java.security.MessageDigest;
    
    import jp.wasabeef.glide.transformations.internal.FastBlur;
    
    public class BlurTransformation extends BitmapTransformation {
    
        private static final int VERSION = 1;
        private static final String ID = "BlurTransformation." + VERSION;
    
        private static int MAX_RADIUS = 25;
        private static int DEFAULT_DOWN_SAMPLING = 1;
    
        private int radius;
        private int sampling;
    
        public BlurTransformation() {
            this(MAX_RADIUS, DEFAULT_DOWN_SAMPLING);
        }
    
        public BlurTransformation(int radius) {
            this(radius, DEFAULT_DOWN_SAMPLING);
        }
    
        public BlurTransformation(int radius, int sampling) {
            this.radius = radius;
            this.sampling = sampling;
        }
    
        @Override
        protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
            int width = toTransform.getWidth();
            int height = toTransform.getHeight();
            int scaledWidth = width / sampling;
            int scaledHeight = height / sampling;
    
            Bitmap bitmap = pool.get(scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888);
    
            Canvas canvas = new Canvas(bitmap);
            canvas.scale(1 / (float) sampling, 1 / (float) sampling);
            Paint paint = new Paint();
            paint.setFlags(Paint.FILTER_BITMAP_FLAG);
            canvas.drawBitmap(toTransform, 0, 0, paint);
            bitmap = FastBlur.blur(bitmap, radius, true);
    
            return bitmap;
        }
    
        @Override public String toString() {
            return "BlurTransformation(radius=" + radius + ", sampling=" + sampling + ")";
        }
    
        @Override public boolean equals(Object o) {
            return o instanceof BlurTransformation &&
                    ((BlurTransformation) o).radius == radius &&
                    ((BlurTransformation) o).sampling == sampling;
        }
    
        @Override public int hashCode() {
            return ID.hashCode() + radius * 1000 + sampling * 10;
        }
    
        @Override public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
            messageDigest.update((ID + radius + sampling).getBytes(CHARSET));
        }
    }
  • 相关阅读:
    二叉树中序遍历及后序遍历(下)
    完全二叉树和三序遍历算法(先序)(上)
    分布式调度——zookeeper
    Linux版JDK环境安装
    Redis的事务
    Redis的持久化——RDB与AOF
    分布式缓存——Redis
    非关系型数据库
    分布式存储——MySQL
    分布式系统
  • 原文地址:https://www.cnblogs.com/xqxacm/p/11063597.html
Copyright © 2011-2022 走看看