您的位置:首页 > 移动开发 > Android开发

【Android图像处理】浮雕滤镜(效果)

2016-11-19 00:07 337 查看
看到雕刻大师的作品是不是很向往呢?

其实不用,完全可以在Android上模拟一下浮雕的滤镜,虽然效果没有大师们的好,但是有着很大程度上的相似。

实现浮雕的原理是用当前点的RGB值减去相邻点的RGB值并加上128作为新的RGB值。由于图片中相邻点的颜色值是比较接近的,因此这样的算法处理之后,只有颜色的边沿区域,也就是相邻颜色差异较大的部分的结果才会比较明显,而其他平滑区域则值都接近128左右,也就是灰色,这样就具有了浮雕效果。

在Android中用代码来实现就是这个样子:

//浮雕
public static Bitmap Carving(Bitmap bm){
int Width = bm.getWidth();
int Height = bm.getHeight();

Bitmap bitmap = Bitmap.createBitmap(Width, Height, Bitmap.Config.ARGB_8888);

int color = 0,colorBefore = 0;
int a,r,g,b;
int r1,g1,b1;

int[] oldPx = new int[Width * Height];
int[] newPx = new int[Width * Height];

bm.getPixels(oldPx, 0, Width, 0, 0, Width, Height);
for(int i = 1; i < Width * Height; i++){
colorBefore = oldPx[i - 1];
a = Color.alpha(colorBefore);
r = Color.red(colorBefore);
g = Color.green(colorBefore);
b = Color.blue(colorBefore);

color = oldPx[i];

r1 = Color.red(color);
g1 = Color.green(color);
b1 = Color.blue(color);

r = (r - r1 + 127);
g = (g - g1 + 127);
b = (b - b1 + 127);

//检查各点像素值是否超出范围
if(r > 255){
r = 255;
}

if(g > 255){
g = 255;
}

if(b > 255){
b = 255;
}
newPx[i] = Color.argb(a, r, g, b);
}

bitmap.setPixels(newPx, 0, Width, 0, 0, Width, Height);
return bitmap;
}


算法中最重要的变化是(当前点的RGB值减去相邻点的RGB值并加上128作为新的RGB值)
r = (r - r1 + 127);
g = (g - g1 + 127);
b = (b - b1 + 127);对应的效果如下:



原图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐