導航:首頁 > 操作系統 > fastblurandroid

fastblurandroid

發布時間:2022-08-24 10:07:21

① AE2015.3里的快速模糊去哪了 難不成我的是沒完全破解的

fast blur和原來gaussian blur已經整合在了一起成了新的gaussian blur,但是如果你還是想用fast blur,可以在effect-obsolete下面找到。

android 實現毛玻璃透明效果有幾種方法

1、如果系統的api在16以上,可以使用系統提供的方法直接處理圖片

復制代碼代碼如下:

if (VERSION.SDK_INT > 16) {
Bitmap bitmap = sentBitmap.(sentBitmap.getConfig(), true);

final RenderScript rs = RenderScript.create(context);
final Allocation input = Allocation.createFromBitmap(rs, sentBitmap, Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT);
final Allocation output = Allocation.createTyped(rs, input.getType());
final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setRadius(radius /* e.g. 3.f */);
script.setInput(input);
script.forEach(output);
output.To(bitmap);
return bitmap;
}

2、 如果Api條件不滿足,可以使用如下方法

復制代碼代碼如下:

@SuppressLint("NewApi")
public static Bitmap fastblur(Context context, Bitmap sentBitmap, int radius) {

Bitmap bitmap = sentBitmap.(sentBitmap.getConfig(), true);
if (radius < 1) {
return (null);
}
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int[] pix = new int[w * h];
// Log.e("pix", w + " " + h + " " + pix.length);
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[] = new int[wh];
int g[] = new int[wh];
int b[] = new int[wh];
int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
int vmin[] = new int[Math.max(w, h)];
int divsum = (div + 1) >> 1;
divsum *= divsum;
int temp = 256 * divsum;
int dv[] = new int[temp];
for (i = 0; i < temp; i++) {
dv[i] = (i / divsum);
}
yw = yi = 0;
int[][] stack = new int[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++) {
rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
for (i = -radius; i <= radius; i++) {
p = pix[yi + Math.min(wm, Math.max(i, 0))];
sir = stack[i + radius];
sir[0] = (p & 0xff0000) >> 16;
sir[1] = (p & 0x00ff00) >> 8;
sir[2] = (p & 0x0000ff);
rbs = r1 - Math.abs(i);
rsum += sir[0] * rbs;
gsum += sir[1] * rbs;
bsum += sir[2] * rbs;
if (i > 0) {
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
} else {
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
}
}
stackpointer = radius;
for (x = 0; x < w; x++) {
r[yi] = dv[rsum];
g[yi] = dv[gsum];
b[yi] = dv[bsum];
rsum -= routsum;
gsum -= goutsum;
bsum -= boutsum;
stackstart = stackpointer - radius + div;
sir = stack[stackstart % div];
routsum -= sir[0];
goutsum -= sir[1];
boutsum -= sir[2];
if (y == 0) {
vmin[x] = Math.min(x + radius + 1, wm);
}
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++) {
rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
yp = -radius * w;
for (i = -radius; i <= radius; i++) {
yi = Math.max(0, yp) + x;
sir = stack[i + radius];
sir[0] = r[yi];
sir[1] = g[yi];
sir[2] = b[yi];
rbs = r1 - Math.abs(i);
rsum += r[yi] * rbs;
gsum += g[yi] * rbs;
bsum += b[yi] * rbs;
if (i > 0) {
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
} else {
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
}
if (i < hm) {
yp += w;
}
}
yi = x;
stackpointer = radius;
for (y = 0; y < h; y++) {
// Preserve alpha channel: ( 0xff000000 & pix[yi] )
pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum];
rsum -= routsum;
gsum -= goutsum;
bsum -= boutsum;
stackstart = stackpointer - radius + div;
sir = stack[stackstart % div];
routsum -= sir[0];
goutsum -= sir[1];
boutsum -= sir[2];
if (x == 0) {
vmin[y] = Math.min(y + r1, hm) * w;
}
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;
}
}
// Log.e("pix", w + " " + h + " " + pix.length);
bitmap.setPixels(pix, 0, w, 0, 0, w, h);
return (bitmap);
}

③ box blur 與普通的fast blur 有什麼區別

blur()是觸發焦點離開事件。
比如說一個文本框,當輸入完後,直接離開焦點。
這個一般都是js去做,這個方法在項目中幾乎不怎麼用。

④ 動態載入fastblur的模糊效果不如直接載入的

這么搞,試過了效果一樣了
Loader{
id: _loader
sourceComponent: myFb
active: false
asynchronous: true
anchors.fill: bug1
onLoaded: {
item.radius = 32
item.source = bug1
}
}
property Component myFb:FastBlur {
anchors.fill: parent
}

⑤ android 虛化效果 有什麼作用

虛化效果本身就是一種特效而已,從美觀角度設計考慮吧。
在Android可以用RenderScript方便的實現這個方法:

private void blur(Bitmap bkg, View view, float radius) {
Bitmap overlay = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(overlay);
canvas.drawBitmap(bkg, -view.getLeft(), -view.getTop(), null);
RenderScript rs = RenderScript.create(this);
Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());
blur.setInput(overlayAlloc);
blur.setRadius(radius);
blur.forEach(overlayAlloc);
overlayAlloc.To(overlay);
view.setBackground(new BitmapDrawable(getResources(), overlay));
rs.destroy();
}

但是RenderScript的這個方法需要Android API17,也就說需要在Android 4.2上才能實現。
低於Android4.2可以用Java原生代碼實現。但是效率會低不少:這完全是一種妥協的方式,不推薦。

/*
* This method was copied from
* The only modifications I've made are to remove a couple of Log
* statements which could slow things down slightly.
*/
public Bitmap fastblur(Bitmap sentBitmap, int radius) {

// Stack Blur v1.0 from
//
//
// Java Author: Mario Klingemann <mario at quasimondo.com>
//
// created Feburary 29, 2004
// Android port : Yahel Bouaziz <yahel at kayenko.com>
//
// ported april 5th, 2012

// This is a compromise between Gaussian Blur and Box blur
// It creates much better looking blurs than Box Blur, but is
// 7x faster than my Gaussian Blur implementation.
//
// I called it Stack Blur because this describes best how this
// filter works internally: it creates a kind of moving stack
// of colors whilst scanning through the image. Thereby it
// just has to add one new block of color to the right side
// of the stack and remove the leftmost color. The remaining
// colors on the topmost layer of the stack are either added on
// or reced by one, depending on if they are on the right or
// on the left side of the stack.
//
// If you are using this algorithm in your code please add
// the following line:
//
// Stack Blur Algorithm by Mario Klingemann <[email protected]>

Bitmap bitmap = sentBitmap.(sentBitmap.getConfig(), true);

if (radius < 1) {
return (null);
}

int w = bitmap.getWidth();
int h = bitmap.getHeight();

int[] pix = new int[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[] = new int[wh];
int g[] = new int[wh];
int b[] = new int[wh];
int rsum, gsum, bsum, x, y, i, p, yp, yi, yw;
int vmin[] = new int[Math.max(w, h)];

int divsum = (div + 1) >> 1;
divsum *= divsum;
int dv[] = new int[256 * divsum];
for (i = 0; i < 256 * divsum; i++) {
dv[i] = (i / divsum);
}

yw = yi = 0;

int[][] stack = new int[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++) {
rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
for (i = -radius; i <= radius; i++) {
p = pix[yi + Math.min(wm, Math.max(i, 0))];
sir = stack[i + radius];
sir[0] = (p & 0xff0000) >> 16;
sir[1] = (p & 0x00ff00) >> 8;
sir[2] = (p & 0x0000ff);
rbs = r1 - Math.abs(i);
rsum += sir[0] * rbs;
gsum += sir[1] * rbs;
bsum += sir[2] * rbs;
if (i > 0) {
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
} else {
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
}
}
stackpointer = radius;

for (x = 0; x < w; x++) {

r[yi] = dv[rsum];
g[yi] = dv[gsum];
b[yi] = dv[bsum];

rsum -= routsum;
gsum -= goutsum;
bsum -= boutsum;

stackstart = stackpointer - radius + div;
sir = stack[stackstart % div];

routsum -= sir[0];
goutsum -= sir[1];
boutsum -= sir[2];

if (y == 0) {
vmin[x] = Math.min(x + radius + 1, wm);
}
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++) {
rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0;
yp = -radius * w;
for (i = -radius; i <= radius; i++) {
yi = Math.max(0, yp) + x;

sir = stack[i + radius];

sir[0] = r[yi];
sir[1] = g[yi];
sir[2] = b[yi];

rbs = r1 - Math.abs(i);

rsum += r[yi] * rbs;
gsum += g[yi] * rbs;
bsum += b[yi] * rbs;

if (i > 0) {
rinsum += sir[0];
ginsum += sir[1];
binsum += sir[2];
} else {
routsum += sir[0];
goutsum += sir[1];
boutsum += sir[2];
}

if (i < hm) {
yp += w;
}
}
yi = x;
stackpointer = radius;
for (y = 0; y < h; y++) {
// Preserve alpha channel: ( 0xff000000 & pix[yi] )
pix[yi] = ( 0xff000000 & pix[yi] ) | ( dv[rsum] << 16 ) | ( dv[gsum] << 8 ) | dv[bsum];

rsum -= routsum;
gsum -= goutsum;
bsum -= boutsum;

stackstart = stackpointer - radius + div;
sir = stack[stackstart % div];

routsum -= sir[0];
goutsum -= sir[1];
boutsum -= sir[2];

if (x == 0) {
vmin[y] = Math.min(y + r1, hm) * w;
}
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);
}

⑥ 在android,怎麼實現activity模糊圖層效果呢

Android裡面:
最普遍的模糊技術是這樣做的:從TextView的後一層背景中截取一部分;進行模糊處理;把模糊處理後的部分設置為TextView的背景。
實現activity模糊圖層效果是RenderScript是Android在API 11之後加入的,用於高效的圖片處理,包括模糊、混合、矩陣卷積計算等,通過一種fastblur模糊圖片演算法來計算一張圖片像素,進而更改圖片的解析度和模糊程度。演算法代碼可以參考這篇csdn博客介紹幾種模糊演算法,地址如下:http://blog.csdn.net/xu_fu/article/details/23131241。

幾種演算法實現的效果都差不多,但是效果和時間上還是有很大區別,這取決於你的Android實際的運行環境,如果機器是Android API 2.0以下的,就不能使用RenderScript類,只能使用硬編碼方式,這就涉及到OPENGL的知識了,OPENGL就是對圖像進行各種處理的一門知識,這些知識都可以到網上找得到。我在csdn上次了一個Android圖片模糊處理的一個小demo,歡迎下載:鏈接如下:http://download.csdn.net/detail/omayyouhappy/8888251

⑦ fastboot是什麼意思

意思是:快速啟動

重點詞彙:fast

英 [fɑ:st]

釋義:

adj 快速的,迅速的;緊的,穩固的

adv 迅速地;緊緊地;徹底地

vi 禁食,齋戒

n 齋戒;絕食

n (Fast)人名;(德、英、俄、芬、捷、瑞典)法斯特

[ 比較級 faster 最高級 fastest 過去式 fasted 過去分詞 fasted 現在分詞 fasting 第三人稱單數 fasts ]

短語:

Fast Food 快餐 ; 便當 ; 西式快餐

(7)fastblurandroid擴展閱讀:

重點詞彙用法:Fast

adj (形容詞)

1、fast的基本意思是「快的」,通常指運動的人或物體本身有快速的特點。引申指「牢固的」,此時只用作表語。還可指「(顏色)不褪色的」。

2、fast可以表示鍾表時間的快,但要放在時間名詞之後,而不能按漢語的表達習慣放在前面。

adv (副詞)

1、fast用作副詞時,可指物體或人的速度快,主要用來修飾人或物體的動作。也可指某物「牢固地」。

2、fast可與介詞連用,如by, in等。

閱讀全文

與fastblurandroid相關的資料

熱點內容
我的世界怎麼在聯機大廳做伺服器 瀏覽:288
分手程序員 瀏覽:444
php將html導出為word 瀏覽:798
騰訊加密視頻能破解嗎 瀏覽:1005
反編譯後導入eclipse 瀏覽:945
買阿里雲伺服器有郵箱嗎 瀏覽:823
pdf卡片2004 瀏覽:307
e算量加密鎖檢測不到 瀏覽:774
python串口讀取數據類型 瀏覽:758
17年新款寶來壓縮機不跳 瀏覽:105
王者打著為什麼伺服器升級 瀏覽:847
aliyunlinux安裝 瀏覽:981
jdk8分層編譯 瀏覽:453
單片機脈沖計數程序 瀏覽:825
原相機文件夾名 瀏覽:330
淘寶雲伺服器靠什麼賺錢 瀏覽:136
單片機同步通信 瀏覽:259
游戲伺服器如何選 瀏覽:746
和平精英蘋果轉安卓怎麼轉不了 瀏覽:52
偉福單片機實驗箱 瀏覽:157