说到老照片,很多人就会想起儿时的照片。没错,老照片就是这样的,我称之为情怀滤镜。
先说一下Android图像矩阵处理(图片来源 慕课网)
也就是说,每一个矩阵都对应着一个唯一的滤镜(效果)。
那么,老照片滤镜(效果)是一个什么样的矩阵呢?
先看一下代码:
//老照片 public static Bitmap OldPhoto(Bitmap bm){ int Width = bm.getWidth(); int Height = bm.getHeight(); Bitmap bitmap = Bitmap.createBitmap(Width, Height, Bitmap.Config.ARGB_8888); int color = 0; int r,g,b,a,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 = 0; i < Width * Height; i++){ color = oldPx[i]; r = Color.red(color); g = Color.green(color); b = Color.blue(color); a = Color.alpha(color); //老照片矩阵 r1 = (int) (0.393 * r + 0.769 * b + 0.189 * b); g1 = (int) (0.349 * r + 0.686 * g + 0.168 * b); b1 = (int) (0.272 * r + 0.534 * g + 0.131 * b); //检查各像素值是否超出范围 if(r1 > 255){ r1 = 255; } if(g1 > 255){ g1 = 255; } if(b1 == 255){ b1 = 255; } newPx[i] = Color.argb(a, r1, g1, b1); } bitmap.setPixels(newPx, 0, Width, 0, 0, Width, Height); return bitmap; }老照片矩阵就是这样的:
0.393 0.769 0.189
0.349 0.686 0.168
0.272 0.534 0.131
每一行之和都为1,就是说,每个点的rgb值都是原来rgb值按照这个比例实现的。
现在来看一下效果:
满满的情怀。
作者:qq_32353771 发表于2016/11/17 22:42:37 原文链接
阅读:21 评论:0 查看评论