安卓高斯模糊

2021-10-04 13:42:26 字數 4395 閱讀 2768

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 它將正態分佈 又名 高斯分布 用於影象處理。本文介紹 高斯模糊 的演算法,你會看到這...