首先我们来创建一个叫Image的类,这个类主要用来处理与图有关的一些操作。

package org.cn.tools;

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Matrix;
  6. import android.graphics.Bitmap.Config;
  7. import android.graphics.BitmapFactory;
  8. public class Image {
  9. public Bitmap bitmap;  //图片资源对象
  10. /**
  11. * 通过id来获得图片
  12. * @param context
  13. * @param id
  14. */
  15. public Image(Context context,int id){
  16. bitmap = BitmapFactory.decodeResource(context.getResources(), id);
  17. }
  18. /**
  19. * 通过图片文件名来获得图片,主要用于图片在Asset目录下时
  20. * @param context
  21. * @param name    图片名
  22. * @param scaleW  图片宽的缩放比例
  23. * @param scaleH  图片高的缩放比例
  24. * @throws IOException
  25. */
  26. public Image(Context context,String name,float scaleW,float scaleH) throws IOException{
  27. InputStream is = context.getAssets().open(name);
  28. bitmap = BitmapFactory.decodeStream(is);
  29. is.close();
  30. bitmap = setScaleSize(bitmap, scaleW,scaleH);
  31. }
  32. public int getWidth(){
  33. return bitmap.getWidth();
  34. }
  35. public int getHeight(){
  36. return bitmap.getHeight();
  37. }
  38. /**
  39. * 将bitmap的像素值放入数组
  40. * @param array
  41. * @param x
  42. * @param y
  43. * @return
  44. */
  45. public int[] getPixel(int[] array,int x,int y){
  46. bitmap.getPixels(array, 0, getWidth(), 0, 0, getWidth(), getHeight());
  47. return array;
  48. }
  49. /**
  50. * 通过一个像素数组创建Bitmap
  51. * @param array
  52. * @param w
  53. * @param h
  54. * @return
  55. */
  56. public Bitmap CreateImage(int[] array,int w,int h){
  57. Bitmap image = Bitmap.createBitmap(array, w, h, Config.RGB_565);
  58. return image;
  59. }
  60. /**
  61. * 图片缩放
  62. * @param bitmap
  63. * @param arg0
  64. * @param arg1
  65. * @return
  66. */
  67. private Bitmap setScaleSize(Bitmap bitmap,float arg0,float arg1){
  68. Matrix matrix = new Matrix();
  69. matrix.postScale(arg0,arg1);
  70. bitmap = Bitmap.createBitmap(bitmap, 0, 0,getWidth(),getHeight(), matrix,true);
  71. return bitmap;
  72. }
  73. /**
  74. * 图片内存回收
  75. *
  76. * @param image
  77. * @return
  78. */
  79. public static void free(Image image) {
  80. try {
  81. if(image.bitmap != null){
  82. if(image.bitmap.isRecycled()==false) {//如果没有回收
  83. //回收图片所占的内存
  84. image.bitmap.recycle();
  85. if(image.bitmap.isRecycled()== true){
  86. image.bitmap = null;
  87. }
  88. }else{
  89. image.bitmap = null;
  90. }
  91. }else{
  92. image.bitmap = null;
  93. //return null;
  94. }
  95. } catch (Exception e) {
  96. e.printStackTrace();
  97. }
  98. //return image;
  99. }
  100. }</span>

创建完image处理类后我们便可以再activity里进行操作处理了,创建ImageAct.java.例子是将白色换为红色。

package org.cn;

  1. import java.io.IOException;
  2. import java.lang.Character.UnicodeBlock;
  3. import android.app.Activity;
  4. import android.graphics.Bitmap;
  5. import android.graphics.drawable.BitmapDrawable;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.view.Window;
  10. import android.view.WindowManager;
  11. import android.view.WindowManager.LayoutParams;
  12. import android.widget.ImageView;
  13. public class ImageAct extends Activity {
  14. Image image;
  15. int len;
  16. int red;
  17. int greed;
  18. int blue;
  19. int apla;
  20. int pix;
  21. /** Called when the activity is first created. */
  22. @Override
  23. public void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.main);
  26. try {
  27. image = new Image(this, "Alfa_Romeo_8C_Competizione_Detail.png",1,1);
  28. len = image.getWidth() * image.getHeight();
  29. int[] imageARGB = new int[len];
  30. int[] newimage = new int[len];
  31. image.getPixel(imageARGB, 0, 0);
  32. for (int i = 0; i < image.getHeight(); i++)
  33. for (int j = 0; j < image.getWidth(); j++) {
  34. if (imageARGB[i * image.getWidth() + j] != 0) {
  35. //apla = ((imageARGB[i * image.getWidth() + j]&0xaa000000)>>24);
  36. red = ((imageARGB[i * image.getWidth() + j] & 0x00ff0000) >> 16);
  37. greed = ((imageARGB[i * image.getWidth() + j] & 0x0000ff00) >> 8);
  38. blue = ((imageARGB[i * image.getWidth() + j] & 0x000000ff));
  39. // int apla = ((5 * 255 / 10) << 24) | 0x00ffffff;
  40. if (red == 255 && greed == 255 & blue == 255) {
  41. red = 255;
  42. greed = 0;
  43. blue = 0;
  44. // pix =((red<<16)|(greed<<8)|blue)&apla;
  45. }
  46. pix = (red << 16) | (greed << 8) | blue;
  47. newimage[i * image.getWidth() + j] = pix;
  48. } else
  49. newimage[i * image.getWidth() + j] = imageARGB[i
  50. * image.getWidth() + j];
  51. }
  52. Bitmap bitmap = image.CreateImage(newimage, image.getWidth(),
  53. image.getHeight());
  54. ((ImageView) findViewById(R.id.imageView1)).setImageBitmap(bitmap);
  55. } catch (IOException e) {
  56. // TODO Auto-generated catch block
  57. e.printStackTrace();
  58. }
  59. }
  60. }

ok通过上面的两个类就可以将图片里的白色转换为红色了。

android 之修改图片的某一颜色值的更多相关文章

  1. android 通过修改图片像素实现CircleImageView

    CircleImageView实现方法有很多种,各有优缺点,因此需要按照不同的场景使用.我们今天使用修改图片像素的方法实现CircleImageView,主要知识点无非是勾股定理和点到圆形的距离. 素 ...

  2. Android动态修改图片颜色的实现方式分析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.修改色相.饱和度.亮度 参看:http://blog.csdn.NET/sjf0115/article/details/7267063 2.使 ...

  3. Android 实现对图片 Exif 的修改(Android 自带的方法)

    很多时候我们都要对我们的图片信息进行一些处理,比如向图片中写入经纬度,拍摄时间,设备信息,作者等等. 这个时候我们就要对我们的图片Exif进行写入信息的操作,当然,我们想知道图片的Exif信息,也可以 ...

  4. [转]【Android】9-patch图片以及例子说明

    1.何为9-patch? NinePatch图片以*.9.png结尾,和普通图片(png图片)的区别是四周多了一个边框(如下图所示): 采用NinePatch图片做背景,可使背景随着内容的拉伸(缩小) ...

  5. Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

    Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一 ...

  6. Picasso – Android系统的图片下载和缓存类库

    Picasso – Android系统的图片下载和缓存类库 Picasso 是Square开源的一个用于Android系统下载和缓存图片的项目.该项目和其他一些下载图片项目的主要区别之一是:使用4.0 ...

  7. android 加载图片框架--Glide使用详解

    一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...

  8. Android开发笔记——图片缓存、手势及OOM分析

    把图片缓存.手势及OOM三个主题放在一起,是因为在Android应用开发过程中,这三个问题经常是联系在一起的.首先,预览大图需要支持手势缩放,旋转,平移等操作:其次,图片在本地需要进行缓存,避免频繁访 ...

  9. Android微信九宫格图片展示控件

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/214 Android微信九宫格图片展示控件 半年前,公司产 ...

随机推荐

  1. php学习笔记5

    PHP 常量 常量值被定义后,在脚本的其他任何地方都不能被改变. 一个常量由英文字母.下划线.和数字组成,但数字不能作为首字母出现. (常量名不需要加 $ 修饰符). 注意: 常量在整个脚本中都可以使 ...

  2. Spider_reg

    # 解析 数据的分类 结构化数据 有固定的格式,如 :HTML.XML.JSON 非结构化数据 图片.音频.视频,这类数据一般都存储为二进制 # 正则表达式 re 使用流程 创建编译对象:p = re ...

  3. Loadrunner经典测试实例

    Loadrunner经典测试实例

  4. Sql Server 2014完全卸载

    经历过好多次Sql server的安装与卸载,有时发现自己卸载的费时费力,单纯地卸载个软件就要吐血了,那么现在我觉得是时候整理一下了. 1.在运行中输入services.msc,然后找到所有跟Sql ...

  5. Java Web学习总结(17)——JSP属性范围

    所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...

  6. JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系

    JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页.至于它为什么会出现,主要 ...

  7. GPUImage ==> 一个基于GPU图像和视频处理的开源iOS框架

    Logo 项目介绍: GPUImage是Brad Larson在github托管的开源项目. GPUImage是一个基于GPU图像和视频处理的开源iOS框架,提供各种各样的图像处理滤镜,并且支持照相机 ...

  8. Dynamics CRM 2015/2016 Web API:Unbound Function 和 Bound Function

    今天我们来看看Dynamics CRM Web API Function 吧, 这是一个新概念,刚接触的时候我也是比較的迷糊.这种命名确实是和之前的那套基于SOAP协议的API全然联系不上.好了,不说 ...

  9. 8.1 Android灯光系统_总体框架

    1.框架 APP(java语言实现) ------------------------------- JNI(c++语言实现)     向上提供Java执行c函数的接口  向下访问HAL ------ ...

  10. mysql三种带事务批量插入

    原文:mysql三种带事务批量插入 c#之mysql三种带事务批量插入 前言 对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到 ...