【Android图像处理】图像处理之-百叶窗效果

来源:互联网 发布:mac新手入门 编辑:程序博客网 时间:2024/04/28 19:50

百叶窗,很多人都非常清楚,那么本文就带你一起将图片处理成百叶窗效果。

具体代码如下:

//百叶窗public static Bitmap Blind(Bitmap bitmap){int w = bitmap.getWidth();int h = bitmap.getHeight();Bitmap result = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);//垂直方向上的百叶窗boolean _direct = false;//horizontal: true,  vertical: falseint _width = w / 10; //10个int _opacity = 100;int _color = 0x000000;int r, g, b, a, color;int[] oldPx = new int[w * h];int[] newPx = new int[w * h];bitmap.getPixels(oldPx, 0, w, 0, 0, w, h);for(int x = 0 ; x < (w - 1) ; x++){for(int y = 0 ; y < (h - 1) ; y++){color = oldPx[x * h + y];r = Color.red(color);g = Color.green(color);b = Color.blue(color); int  nMod = 0 ;if (_direct) // 水平方向nMod = y % _width ;else if (_direct == false) // 垂直方向nMod = x % _width ;double fDelta = 255.0 * (_opacity/100.0) / (_width-1.0);a = Function.FClamp0255(nMod * fDelta) ;int colorR = _color & 0xFF0000 >> 16;int colorG = _color & 0x00FF00 >> 8;int colorB = _color & 0x0000FF;if (_color == 0xFF){newPx[x * h + y] = Color.rgb(colorR, colorG, colorB);continue ;}if (a == 0)continue ;int t = 0xFF - a ;newPx[x * h + y] = Color.rgb((colorR * a + r * t) / 0xFF,(colorG * a + g * t) / 0xFF, (colorB * a + b * t) / 0xFF);}}result.setPixels(newPx, 0, w, 0, 0, w, h);return result;}
在本算法中默认使用的是垂直方向上的百叶窗效果,其实是可以选择水平方向的算法的。如果将_direct 抽取为方法的参数,那么就能在调用该方法的时候选择是水平还是垂直。

效果如下:

                         效果图                                                                原图


同样也是需要将图片截取成宽高相等的图片才能达到比较理想的效果。

1 0