国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android實(shí)現(xiàn)圖片毛玻璃背景效果

2019-10-22 18:12:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例為大家分享了Android實(shí)現(xiàn)毛玻璃背景效果的具體代碼,供大家參考,具體內(nèi)容如下

import android.content.Context; import android.graphics.Bitmap;  /**  * Created by abel.zhang on 2016/8/9.  * 圖片的毛玻璃效果  */ public class GsdFastBlur {   /**   *   * @param context   * @param sentBitmap   * @param radius 12 模糊程度   * @return   */  public static Bitmap fastblur(Context context, Bitmap sentBitmap, int radius) {    if (sentBitmap==null){    return null;   }   Bitmap bitmap =null;   try {    bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);   }catch (Exception e){    e.printStackTrace();    return null;   }     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);  }  } 

效果圖:

Android,毛玻璃

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新田县| 泗水县| 海林市| 定远县| 祁门县| 望谟县| 乌拉特前旗| 萝北县| 武汉市| 临沭县| 无棣县| 奉贤区| 德惠市| 高淳县| 渭南市| 安丘市| 望江县| 昭通市| 志丹县| 漳平市| 灵川县| 洛宁县| 博乐市| 盘锦市| 寻乌县| 太康县| 墨竹工卡县| 化州市| 泸西县| 格尔木市| 山西省| 宜州市| 镇江市| 搜索| 澄江县| 普兰店市| 镇雄县| 改则县| 张家口市| 安福县| 霍林郭勒市|