Android圖片模糊最佳實現,高性能,支持先壓縮

直接上代碼:

public class BlurUtil {

    /**
     * 模糊圖片
     * @param context
     * @param bitmap
     * @param radius 模糊半徑
     * @param simple 縮小比例
     * @return
     */
    public static Bitmap blurImage(Context context, Bitmap bitmap, int radius, int simple) {
        if (simple > 1) {
            bitmap = compressBitmap(bitmap, simple);
        }
        return blurByRenderScript(context, bitmap, radius);
    }

    /**
     * 模糊
     * @param context 
     * @param bitmap
     * @param radius
     * @return
     */
    public static Bitmap blurByRenderScript(Context context, Bitmap bitmap, int radius) {
        RenderScript rs = RenderScript.create(context);
        Allocation allocation = Allocation.createFromBitmap(rs, bitmap);
        ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, allocation.getElement());
        blur.setInput(allocation);
        blur.setRadius(radius);
        blur.forEach(allocation);
        allocation.copyTo(bitmap);

        rs.destroy();
        return bitmap;
    }

    /**
     * 截屏
     * @param activity
     * @return
     */
    public static Bitmap capture(Activity activity) {
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        return view.getDrawingCache();
    }

    /**
     * 縮放
     * @param bitmap 
     * @param simple
     * @return
     */
    private static Bitmap compressBitmap(Bitmap bitmap, int simple) {
        if (simple > 1) {
            bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth() / simple,
                    bitmap.getHeight() / simple, true);
        }
        return bitmap;
    }

這麼用->

Bitmap bitmap = BlurUtil.capture(activity);
if (bitmap != null) {
    view.setBackground(new BitmapDrawable(activity.getResources(),
            BlurUtil.blurImage(activity, bitmap, 5, 2)));
}

例子裏的bitmap是使用的屏幕截圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章