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;
}
* 泛红效果
* @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;
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories