import android.content.context;
import android.graphics.bitmap;
import android.graphics.matrix;
import android.graphics.rect;
import android.util.log;
import android.view.view;
import android.view.window;
/** * @author created by 老夫子 on [2020/3/27 21:48 星期五]
* @describe:
*/public
class
fastblurutility
/** * 截圖
* @param activity 截圖的activity
* @return 截圖
*/public
static bitmap oncut
(activity activity)
/** * 獲得模糊化的背景
* @param activity 獲取模糊化的背景activity
* @return 模糊化的背景
*/public
static bitmap getblurbackgrounddrawer
(activity activity)
/** * 截圖
* @param activity 截圖的activity
* @return 截圖
*/public bitmap takescreenshot
(activity activity)
public
static bitmap startblurbackground
(bitmap bkg)
/** * 放大
* @param bitmap 需要放大的
* @return 放大的
*/private
static bitmap big
(bitmap bitmap)
/** * 縮小
* @param bitmap 需要縮小的
* @return 縮小的
*/private
static bitmap small
(bitmap bitmap)
/** * 將模糊化
* @param sentbitmap 需要模糊的
* @param radius 模糊程度
* @return 模糊後的
*/private
static bitmap fastblur
(bitmap sentbitmap,
int radius)
int w = bitmap.
getwidth()
;int h = bitmap.
getheight()
;int
pix =
newint
[w * h]
; bitmap.
getpixels
(pix,
0, w,0,
0, w, h)
;int wm = w -1;
int hm = h -1;
int wh = w * h;
int div = radius + radius +1;
int r=
newint
[wh]
;int g=
newint
[wh]
;int b=
newint
[wh]
;int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
int vmin=
newint
[math.
max(w, h)];
int divsum =
(div +1)
>>1;
divsum *= divsum;
int dv=
newint
[256
* divsum]
;for
(i =
0; i <
256* divsum; i++
)
yw = yi =0;
int[
] stack =
newint
[div][3
];int stackpointer;
int stackstart;
int[
] sir;
int rbs;
int r1 = radius +1;
int routsum, goutsum, boutsum;
int rinsum, ginsum, binsum;
for(y =
0; y < h; y++
)else
} stackpointer = radius;
for(x =
0; x < w; x++
) p = pix[yw + vmin[x]];
sir[0]
=(p &
0xff0000
)>>16;
sir[1]
=(p &
0x00ff00
)>>8;
sir[2]
=(p &
0x0000ff);
rinsum += sir[0]
; ginsum += sir[1]
; binsum += sir[2]
;
rsum += rinsum;
gsum += ginsum;
bsum += binsum;
stackpointer =
(stackpointer +1)
% div;
sir = stack[
(stackpointer)
% div]
;
routsum += sir[0]
; goutsum += sir[1]
; boutsum += sir[2]
;
rinsum -= sir[0]
; ginsum -= sir[1]
; binsum -= sir[2]
;
yi++;}
yw += w;
}for
(x =
0; x < w; x++
)else
if(i < hm)
} yi = x;
stackpointer = radius;
for(y =
0; y < h; y++
) p = x + vmin[y]
;
sir[0]
= r[p]
; sir[1]
= g[p]
; sir[2]
= b[p]
;
rinsum += sir[0]
; ginsum += sir[1]
; binsum += sir[2]
;
rsum += rinsum;
gsum += ginsum;
bsum += binsum;
stackpointer =
(stackpointer +1)
% div;
sir = stack[stackpointer]
;
routsum += sir[0]
; goutsum += sir[1]
; boutsum += sir[2]
;
rinsum -= sir[0]
; ginsum -= sir[1]
; binsum -= sir[2]
;
yi += w;}}
bitmap.
setpixels
(pix,
0, w,0,
0, w, h)
;return
(bitmap);}
}
高斯模糊 理論
高斯分布函式可表示為乙個一維的函式g x 或者乙個二維的函式g x,y 在這些函式中,x和y代表了相對於原始中心點 center tap 畫素的偏移 pixel offsets 值。也就是說,他們距離中心多少畫素。這裡的center tap,通常翻譯為 中心抽頭 它在電學中的概念是 在整個次級線圈的...
android高斯模糊
高斯模糊演算法介紹 高斯模糊就是將指定畫素變換為其與周邊畫素加權平均後的值,權重就是高斯分布函式計算出來的值。演算法介紹 一 通過自身的寫演算法 public static void gaussblur int data,int width,int height,int radius,float s...
高斯模糊演算法
正太分布,又稱高斯分布 正態分佈的前世今生 上 正態分佈的前世今生 下 通常,影象處理軟體會提供 模糊 blur 濾鏡,使產生模糊的效果。模糊 的演算法有很多種,其中有一種叫做 高斯模糊 gaussian blur 它將正態分佈 又名 高斯分布 用於影象處理。本文介紹 高斯模糊 的演算法,你會看到這...