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));
        }
    }
  • 相关阅读:
    机器学习-数据与特征工程
    机器学习-聚类(clustering)算法:K-means算法
    机器学习-回归中的相关度和R平方值
    机器学习-非线性回归(Logistic Regression)及应用
    机器学习-多元线性回归(一)
    机器学习-简单线性回归(二)
    MVC,MVP,MVVM
    Git从入门到熟练
    NSNotificationCenter
    FMDB的线程安全
  • 原文地址:https://www.cnblogs.com/xqxacm/p/11063597.html
Copyright © 2011-2022 走看看