在Android上实现图像颜色过滤与反转

一:原理

Android已经提供了以resource形式加载图片,使用BitmapFactory的decodeResource

方法获取一个Bitmap对象,从Bitmap对象中读取图片的像素数组,基于像素ARGB值实现

颜色过滤和颜色反转。

颜色过滤(Color Filter)是值对RGB三种颜色通道,设定一个百分比数值,分别对三个颜

色通过提取百分比之后的数值。假设Red设置为0%就表示红色分量为0。

颜色反转(Color Invert)是指对原像素点的RGB三个值,分别减去255然后取绝对值,新的

RGB值将取代原来的值。

灰度过滤(Gray Filter)是指对一张RGB真彩色的图像转换为0 ~ 255灰度图像。

二:程序关键点解析

1. 如何在两个Intent之间传递值

在主Activity中使用如下代码启动Color Filter的Intent代码如下:

Intent settingUIIntent = new Intent(this, SettingsUIActivity.class); startActivityForResult(settingUIIntent, ImageConstants.REQUEST_RGB_ID);

在主Activity中重载onActivityResult()方法实现参数传递和结果解析。

Color Filter的UI画面如下:


2. Color Filter代码解析

// reduce the RGB r = (int)((float)r * redPrecent); g = (int)((float)g * greenPrecent); b = (int)((float)b * bluePrecent);  // color convert if(isColorInvert) { r = 255 - r; g = 255 - g; b = 255 - b; }   // write the pixel data back pixelData[index] = (a << 24) | (r<< 16) | (g << 8) | b;

3. 灰度图像

tr = tg= tb = (int)(0.299 * (double)tr + 0.587 * (double)tg +0.114 * (double)tb);

三:程序效果

基于Android 3.2版本开发与测试 �C 主界面 +原图:

红色分量为零时效果:


Green分量为零时效果:

蓝色分量为零时效果:

RGB颜色反转效果:

RGB灰度化以后效果:


更多相关文章

  1. Android实现疯狂连连看游戏之游戏效果预览(一)
  2. Android中RatingBar的自定义效果
  3. Android实现多行文字的跑马灯效果(Realizing multiple lines of M
  4. Android动画效果 translate、scale、alpha、rotate 切换Acti...
  5. 为Android的界面设计增加跳跃效果
  6. Android 中的ListView选中项的背景颜色怎么设置?
  7. Android\OPhone动画分析之翻转效果
  8. Android中自定义SeekBar的背景颜色,进度条颜色,以及滑块的图片

随机推荐

  1. Android通过ksoap2这个框架调用webservic
  2. Android权限申请的学习实践
  3. 移动应用界面设计的尺寸规范
  4. Android图形图像处理:canvas的save()和res
  5. Android(安卓)Gradle配置资源前缀
  6. Android(安卓)如何获取当前Activity实例
  7. Android(安卓)Studio3.5 xml文件格式化(R
  8. Android基础笔记(十一)- Service基础和注意
  9. Android中利用反射机制来控制AlertDialog
  10. Android(安卓)组件之一(Service)