Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

【Android图像处理】老照片滤镜(效果)

$
0
0

说到老照片,很多人就会想起儿时的照片。没错,老照片就是这样的,我称之为情怀滤镜。

先说一下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 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>