Android 画面设置模糊,如何在Android中模糊图像的某些部分?
做幾次蒙面模糊….
>創建面具
0表示模糊(黑色),> = 1表示不模糊(白色).以足夠大的值初始化此部分,例如w = 100像素
>創建蒙版模糊功能
只是一個常見的卷積與一些矩陣像
0.0 0.1 0.0
0.1 0.6 0.1
0.0 0.1 0.0
但是只做掩模為== 0的目標像素,在圖像模糊后也模糊掩模.這應該稍微擴大白色區域(每次迭代按像素計算但在邊界上丟失幅度,這就是為什么w> 1).
>循環子彈#2 N次
N確定模糊/非模糊漸變深度w只是為了確保毛刺蒙版會增長…每次模糊蒙版都會增加其白色部分
這應該是訣竅,你也可以使用掩碼的擴張而不是模糊它.
[edit1]實施
今天玩了一下,發現面具不夠平滑,所以我改變了算法(這里是我的代碼C):
picture pic0,pic1,pic2;
// pic0 - source
// pic1 - output
// pic2 - mask
int x0=400,y0=330,r0=100,dr=200;
// x0,y0,r0 - masked area
// dr - blur gradient size
int i,r;
// init output as sourceimage
pic1=pic0;
// init mask (size of source image) with gradient circles
pic2.resize(pic0.xs,pic0.ys);
pic2.clear(0);
for (i=1;i<=255;i++)
{
r=r0+dr-((dr*i)>>8);
pic2.bmp->Canvas->Brush->Color=TColor(i<<16); // shifted because GDI has inverse channel layout then direct pixel access
pic2.bmp->Canvas->Pen ->Color=TColor(i<<16);
pic2.bmp->Canvas->Ellipse(x0-r,y0-r,x0+r,y0+r);
}
for (i=1;i<255;i+=10) pic1.rgb_smooth_masked(pic2,i);
這里順暢的功能:
//---------------------------------------------------------------------------
void picture::rgb_smooth_masked(const picture &mask,DWORD treshold)
{
int i,x,y;
color *q0,*q1,*m0,c0,c1,c2;
if ((xs<2)||(ys<2)) return;
for (y=0;y
{
q0=p[y ]; m0=mask.p[y];
q1=p[y+1];
for (x=0;x
if (m0[x].dd
{
c0=q0[x];
c1=q0[x+1];
c2=q1[x];
for (i=0;i<4;i++)
q0[x].db[i]=DWORD((DWORD(c0.db[i])+DWORD(c0.db[i])+DWORD(c1.db[i])+DWORD(c2.db[i]))>>2);
}
}
}
//---------------------------------------------------------------------------
>創建漸變蒙版,其中圓圈的顏色從1增加到255
其余為黑色,漸變寬度為dr,并確定平滑銳度.
>使用蒙版和閾值創建平滑蒙版
平滑掩模像素所在的所有像素.閾.請參閱函數rgb_smooth_masked.它使用2×2卷積矩陣
0.50,0.25
0.25,0.00
>循環閾值從1到255的某個步驟
該步驟確定圖像模糊強度.
最后這里有一些視覺效果,這是我用相機拍攝的源圖像:
這里左邊的輸出和右邊的掩碼:
藍色表示值< 256(B是最低的8位顏色) 我使用自己的圖片類圖片,所以一些成員是: > xs,ys圖像大小,以像素為單位> p [y] [x] .dd是(x,y)位置的像素,為32位整數類型>清晰(彩色) – 清除整個圖像> resize(xs,ys) – 將圖像調整為新分辨率
總結
以上是生活随笔為你收集整理的Android 画面设置模糊,如何在Android中模糊图像的某些部分?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 固定中间焦点,在Andr
- 下一篇: android 最新usb驱动程序下载,