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

android图片颜色处理

2015-12-16 12:17 459 查看
/**
* 泛红效果
* @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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android