android图片颜色处理


/**
		 * 泛红效果
		 * @param bitmapSrc
		 * @param bmpSrcW
		 * @param bmpSrcH
		 * @return
		 */
		private Bitmap change7(Bitmap bitmapSrc, int bmpSrcW, int bmpSrcH) {
			int[] pixels=new int [bmpSrcH*bmpSrcW];
			
			bitmapSrc.getPixels(pixels,0, bmpSrcW, 0, 0,bmpSrcW ,bmpSrcH );
			
			for (int i = 0; i < pixels.length; i++) {
				int argb=pixels[i];
				//一个像素包含alpha,red,green,blue,分别占8位,组成一个32位的int值
				//argb占32位,即java中int类型的大小,左起前8位代表alpha(透明度),接着8位是red的值,然后8位是green,最后8位是blue,
				//8位二进制的最大值是2^8-1,即16进制0xff,10进制255
				 //  0xff  前24位是0,后8位是1,即   00000000 00000000 00000000 11111111
				//argb>>16后,左起前16位是0,接着8位是alpha,最后8位是red值,与0xff做 & 运算,(按位与,对应位同为1才是1,否则是0)
				//所以运算后前24位是0,后8位原来是1则还是1,原来是0则是0,所以后8位的值不变,前24位变为了0,所以就取出了red值,
				//green,blue值的取法类似
				
				 //可以使用Color.red(argb);获取该像素中的red值
				int r=  ( argb>> 16 )   &   0xff; 
			
				int g=  ( argb>> 8 )   &   0xff;
			
				int b=    argb   &   0xff;
			   
				
				
				r=(int) (r*1.5);
				if (r>0xff) {
					r=0xff;
				}
//				
//				g=(int) (g*1.2);
//				if (g>0xff) {
//					g=0xff;
//				}
//				
//				b=(int) (b*1.2);
//				if (b>0xff) {
//					b=0xff;
//				}
				
				//0xff<<24,把透明度置为完全不透明(透明度表示后面的rgb颜色的加深程度,所以透明度值越大,颜色越深,透明度为0时表示完全透明)
				//0xff<<24后右起24位位0,左起8位为alpha。
				//r<<16后左起8位为0,右边16位为0,其他位为red值
				//g<<8后左起16位为0,右起8位为0,其他位为green值
				//使用 | 运算后就把argb拼接了起来得到了32位的值,即一个像素的值
				
				//可以使用Color.rgb();得到像素值
				argb= (0xff<<24)  | (r<<16)  | (g<<8) | b;
				
				pixels[i]=argb;
			}
			
			Bitmap newBmp=Bitmap.createBitmap(pixels, 0, bmpSrcW, bmpSrcW, bmpSrcH, Config.ARGB_8888);
			return newBmp;
		}


你可能感兴趣的:(安卓)