正文  图形图像 > 图像处理/特效 >

android图片特效处理之底片效果

这篇将讲到图片特效处理的底片效果。跟前面一样是对像素点进行处理,算法是通用的。算法原理:将当前像素点的RGB值分别与255之差后的值作为当前点的RGB值。例:ABC求B点的底片效果:B.r = 255 - B.r;B.g = ......

这篇将讲到图片特效处理的底片效果。跟前面一样是对像素点进行处理,算法是通用的。

算法原理:将当前像素点的RGB值分别与255之差后的值作为当前点的RGB值。

例:

ABC

求B点的底片效果:

B.r = 255 - B.r;

B.g = 255 - B.g;

B.b = 255 - B.b;

效果图:

原图:

处理后:

代码:

 

/**
	 * 底片效果
	 * @param bmp
	 * @return
	 */
	private Bitmap film(Bitmap bmp)
	{
		// RGBA的最大值
		final int MAX_VALUE = 255;
		int width = bmp.getWidth();
		int height = bmp.getHeight();
		Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
		
		int pixR = 0;
		int pixG = 0;
		int pixB = 0;
		
		int pixColor = 0;
		
		int newR = 0;
		int newG = 0;
		int newB = 0;
		
		int[] pixels = new int[width * height];
		bmp.getPixels(pixels, 0, width, 0, 0, width, height);
		int pos = 0;
		for (int i = 1, length = height - 1; i < length; i++)
		{
			for (int k = 1, len = width - 1; k < len; k++)
			{
				pos = i * width + k;
				pixColor = pixels[pos];
				
				pixR = Color.red(pixColor);
				pixG = Color.green(pixColor);
				pixB = Color.blue(pixColor);
				
				newR = MAX_VALUE - pixR;
				newG = MAX_VALUE - pixG;
				newB = MAX_VALUE - pixB;
				
				newR = Math.min(MAX_VALUE, Math.max(0, newR));
				newG = Math.min(MAX_VALUE, Math.max(0, newG));
				newB = Math.min(MAX_VALUE, Math.max(0, newB));
				
				pixels[pos] = Color.argb(MAX_VALUE, newR, newG, newB);
			}
		}
		
		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
		return bitmap;
	}