zoukankan      html  css  js  c++  java
  • Android模糊效果总结

    1. 软件模糊

    用软件的方法。利用cpu计算,无sdk版本号要求。


    效果图:
    效果图

    关键模糊代码 github链接

    原文 链接
    译文 链接
    演示样例 代码

    本文地址 :http://blog.csdn.net/csqingchen/article/details/43817975

    2. 使用RenderScript模糊,

    ScriptIntrinsicBlur要求android sdk版本号最低17。

    google的官方文档链接

    具体使用代码例如以下:

        /**
         * 通过调用系统高斯模糊api的方法模糊
         *
         * @param bitmap    source bitmap
         * @param outBitmap out bitmap
         * @param radius    0 < radius <= 25
         * @param context   context
         * @return out bitmap
         */
     public static Bitmap blurBitmap(Bitmap bitmap, Bitmap outBitmap, float radius, Context context) {
            //Let's create an empty bitmap with the same size of the bitmap we want to blur
            //Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
    
            //Instantiate a new Renderscript
            RenderScript rs = RenderScript.create(context);
    
            //Create an Intrinsic Blur Script using the Renderscript
            ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    
            //Create the Allocations (in/out) with the Renderscript and the in/out bitmaps
            Allocation allIn = Allocation.createFromBitmap(rs, bitmap);
            Allocation allOut = Allocation.createFromBitmap(rs, outBitmap);
    
            //Set the radius of the blur
            blurScript.setRadius(radius);
    
            //Perform the Renderscript
            blurScript.setInput(allIn);
            blurScript.forEach(allOut);
    
            //Copy the final bitmap created by the out Allocation to the outBitmap
            allOut.copyTo(outBitmap);
    
            //recycle the original bitmap
    //        bitmap.recycle();
    
            //After finishing everything, we destroy the Renderscript.
            rs.destroy();
    
            return outBitmap;
        }

    3. bitmap缩放处理

    以上两种模糊方法,bitmap尺寸越小,处理的越迅速。特别是方法一。为了达到须要的模糊效果,通常我们须要对源bitmap缩放的处理。缩放代码例如以下:

      /**
         * 比例压缩图片
         *
         * @param sourceBitmap 源bitmap
         * @param scaleFactor  大于1。将bitmap缩小
         * @return 缩小scaleFactor倍后的bitmap
         */
        public static Bitmap compressBitmap(Bitmap sourceBitmap, float scaleFactor) {
            Bitmap overlay = Bitmap.createBitmap((int) (sourceBitmap.getWidth() / scaleFactor),
                    (int) (sourceBitmap.getHeight() / scaleFactor), Config.ARGB_8888);
            Canvas canvas = new Canvas(overlay);
            canvas.translate(0, 0);
            canvas.scale(1 / scaleFactor, 1 / scaleFactor);
            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
            canvas.drawBitmap(sourceBitmap, 0, 0, paint);
            return overlay;
        }

    4. 改变图片的对照度/明暗度

    具体说明见代码凝视,演示样例代码

    /**
         * 改变图片对照度,达到使图片明暗变化的效果
         *
         * @param srcBitmap source bitmap
         * @param contrast  图片亮度。0:全黑。小于1,比原图暗;1.0f原图;大于1比原图亮
         * @return bitmap
         */
        public static Bitmap darkBitmap(Bitmap srcBitmap, float contrast) {
    
            float offset = (float) 0.0; //picture RGB offset
    
            int imgHeight, imgWidth;
            imgHeight = srcBitmap.getHeight();
            imgWidth = srcBitmap.getWidth();
    
            Bitmap bmp = Bitmap.createBitmap(imgWidth, imgHeight, Config.ARGB_8888);
            ColorMatrix cMatrix = new ColorMatrix();
            cMatrix.set(new float[]{contrast, 0, 0, 0, offset,
                    0, contrast, 0, 0, offset,
                    0, 0, contrast, 0, offset,
                    0, 0, 0, 1, 0});
    
            Paint paint = new Paint();
            paint.setColorFilter(new ColorMatrixColorFilter(cMatrix));
    
            Canvas canvas = new Canvas(bmp);
            canvas.drawBitmap(srcBitmap, 0, 0, paint);
    
            return bmp;
        }
  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7229134.html
Copyright © 2011-2022 走看看