資源簡介
開發人員可以使用此工具類對bitmap進行模糊化處理。
代碼片段和文件信息
package?com.yy.utils;
import?android.graphics.Bitmap;
public?class?FastBulr?{
public?static?Bitmap?doBlur(Bitmap?sentBitmap?int?radius
boolean?canReuseInBitmap)?{
Bitmap?bitmap;
if?(canReuseInBitmap)?{
bitmap?=?sentBitmap;
}?else?{
bitmap?=?sentBitmap.copy(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? 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? 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?+?radi
- 上一篇:Java基礎視頻傳智播客劉意
- 下一篇:基于java爬取網絡圖片并且保存到本地
評論
共有 條評論