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));
        }
    }
  • 相关阅读:
    一个好的时间函数
    Codeforces 785E. Anton and Permutation
    Codeforces 785 D. Anton and School
    Codeforces 510 E. Fox And Dinner
    Codeforces 242 E. XOR on Segment
    Codeforces 629 E. Famil Door and Roads
    Codeforces 600E. Lomsat gelral(Dsu on tree学习)
    Codeforces 438D The Child and Sequence
    Codeforces 729E Subordinates
    【ATcoder】D
  • 原文地址:https://www.cnblogs.com/xqxacm/p/11063597.html
Copyright © 2011-2022 走看看