Android编程之图片颜色处理方法

 更新时间:2015年10月21日 14:56:39   作者:非著名程序员  
这篇文章主要介绍了Android编程之图片颜色处理方法,涉及Android针对图片的颜色值、饱和度、透明度等处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了Android编程之图片颜色处理方法。分享给大家供大家参考,具体如下:

你想做到跟美图秀秀一样可以处理自己的照片,美化自己的照片吗?其实你也可以自己做一个这样的软件,废话不多说了,直接上图,上代码了!

效果图如下:

没处理前:

处理之后:

MainActivity.java的代码如下:

package net.loonggg.test; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.ColorMatrix; 
import android.graphics.ColorMatrixColorFilter; 
import android.graphics.Matrix; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.widget.ImageView; 
import android.widget.SeekBar; 
import android.widget.SeekBar.OnSeekBarChangeListener; 
public class MainActivity extends Activity { 
  private SeekBar sb1, sb2, sb3, sb4, sb5; 
  private ImageView iv; 
  private Bitmap bitmap, updateBitmap; 
  private Canvas canvas; 
  private Paint paint; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    iv = (ImageView) findViewById(R.id.iv); 
    sb1 = (SeekBar) findViewById(R.id.sb1); 
    sb2 = (SeekBar) findViewById(R.id.sb2); 
    sb3 = (SeekBar) findViewById(R.id.sb3); 
    sb4 = (SeekBar) findViewById(R.id.sb4); 
    sb5 = (SeekBar) findViewById(R.id.sb5); 
    bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.b); 
    updateBitmap = Bitmap.createBitmap(bitmap.getWidth(), 
        bitmap.getHeight(), bitmap.getConfig()); 
    canvas = new Canvas(updateBitmap); 
    paint = new Paint(); 
    final ColorMatrix cm = new ColorMatrix(); 
    paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
    paint.setColor(Color.BLACK); 
    paint.setAntiAlias(true); 
    final Matrix matrix = new Matrix(); 
    canvas.drawBitmap(bitmap, matrix, paint); 
    iv.setImageBitmap(updateBitmap); 
    /** 
     * RGB三原色 红色值的设置 
     */ 
    sb1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
        int progress = seekBar.getProgress(); 
        cm.set(new float[] { progress / 128f, 0, 0, 0, 0,// 红色值 
            0, 1, 0, 0, 0,// 绿色值 
            0, 0, 1, 0, 0,// 蓝色值 
            0, 0, 0, 1, 0 // 透明度 
        }); 
        paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
        canvas.drawBitmap(bitmap, matrix, paint); 
        iv.setImageBitmap(updateBitmap); 
      } 
      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 
      } 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, 
          boolean fromUser) { 
      } 
    }); 
    /** 
     * RGB三原色 绿色值的设置 
     */ 
    sb2.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
        int progress = seekBar.getProgress(); 
        cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值 
            0, progress / 128f, 0, 0, 0,// 绿色值 
            0, 0, 1, 0, 0,// 蓝色值 
            0, 0, 0, 1, 0 // 透明度 
        }); 
        paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
        canvas.drawBitmap(bitmap, matrix, paint); 
        iv.setImageBitmap(updateBitmap); 
      } 
      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 
      } 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, 
          boolean fromUser) { 
      } 
    }); 
    /** 
     * RGB三原色 蓝色值的设置 
     */ 
    sb3.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
        int progress = seekBar.getProgress(); 
        cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值 
            0, 1, 0, 0, 0,// 绿色值 
            0, 0, progress / 128f, 0, 0,// 蓝色值 
            0, 0, 0, 1, 0 // 透明度 
        }); 
        paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
        canvas.drawBitmap(bitmap, matrix, paint); 
        iv.setImageBitmap(updateBitmap); 
      } 
      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 
      } 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, 
          boolean fromUser) { 
      } 
    }); 
    /** 
     * RGB三原色 三个值都改变为设置饱和度(亮度) 
     */ 
    sb4.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
        int progress = seekBar.getProgress(); 
        cm.set(new float[] { progress / 128f, 0, 0, 0, 0,// 红色值 
            0, progress / 128f, 0, 0, 0,// 绿色值 
            0, 0, progress / 128f, 0, 0,// 蓝色值 
            0, 0, 0, 1, 0 // 透明度 
        }); 
        paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
        canvas.drawBitmap(bitmap, matrix, paint); 
        iv.setImageBitmap(updateBitmap); 
      } 
      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 
      } 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, 
          boolean fromUser) { 
      } 
    }); 
    /** 
     * RGB三原色 设置透明度 
     */ 
    sb5.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
        int progress = seekBar.getProgress(); 
        cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值 
            0, 1, 0, 0, 0,// 绿色值 
            0, 0, 1, 0, 0,// 蓝色值 
            0, 0, 0, progress / 128f, 0 // 透明度 
        }); 
        paint.setColorFilter(new ColorMatrixColorFilter(cm)); 
        canvas.drawBitmap(bitmap, matrix, paint); 
        iv.setImageBitmap(updateBitmap); 
      } 
      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 
      } 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progress, 
          boolean fromUser) { 
      } 
    }); 
  } 
}

布局文件代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:background="#CDCDCD" 
  android:orientation="vertical" 
  tools:context=".MainActivity" > 
  <ImageView 
    android:id="@+id/iv" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 
  <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" 
    android:padding="10dp" > 
    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="红色:" 
      android:textColor="#FF0000" 
      android:textSize="24sp" /> 
    <SeekBar 
      android:id="@+id/sb1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:max="256" 
      android:progress="128" /> 
  </LinearLayout> 
  <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" 
    android:padding="10dp" > 
    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="绿色:" 
      android:textColor="#00FF00" 
      android:textSize="24sp" /> 
    <SeekBar 
      android:id="@+id/sb2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:max="256" 
      android:progress="128" /> 
  </LinearLayout> 
  <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" 
    android:padding="10dp" > 
    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="蓝色:" 
      android:textColor="#0000FF" 
      android:textSize="24sp" /> 
    <SeekBar 
      android:id="@+id/sb3" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:max="256" 
      android:progress="128" /> 
  </LinearLayout> 
  <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" 
    android:padding="10dp" > 
    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="饱和度:" 
      android:textColor="#000000" 
      android:textSize="16.5sp" /> 
    <SeekBar 
      android:id="@+id/sb4" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:max="256" 
      android:progress="128" /> 
  </LinearLayout> 
  <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" 
    android:padding="10dp" > 
    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="透明度:" 
      android:textColor="#000000" 
      android:textSize="16.5sp" /> 
    <SeekBar 
      android:id="@+id/sb5" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:max="256" 
      android:progress="128" /> 
  </LinearLayout> 
</LinearLayout>

到这里就完了,看明白了吗?

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android实现倒计时效果

    Android实现倒计时效果

    这篇文章主要为大家详细介绍了Android实现倒计时效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • 腾讯、百度、华为、搜狗和滴滴Android面试题汇总

    腾讯、百度、华为、搜狗和滴滴Android面试题汇总

    这篇文章主要汇总了腾讯、百度、华为、搜狗和滴滴Android面试题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android开发性能优化总结

    Android开发性能优化总结

    这篇文章主要介绍了Android开发性能优化总结的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • 详解Android中ViewPager的PagerTabStrip子控件的用法

    详解Android中ViewPager的PagerTabStrip子控件的用法

    这篇文章主要介绍了Android中ViewPager的PagerTabStrip子控件的用法,PagerTabStrip与PagerTitleStrip的用法基本相同,文中举了两个详细的例子,需要的朋友可以参考下
    2016-03-03
  • Android检查网络状态工具类详解

    Android检查网络状态工具类详解

    这篇文章主要为大家详细介绍了Android检查网络状态工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android学习教程之九宫格图片展示(13)

    Android学习教程之九宫格图片展示(13)

    这篇文章主要为大家详细介绍了Android学习教程之九宫格图片展示代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android判断网络类型的方法(2g,3g还是wifi)

    Android判断网络类型的方法(2g,3g还是wifi)

    这篇文章主要介绍了Android判断网络类型的方法,可实现判断2g,3g还是wifi的功能,结合实例形式分析了Android针对网络类型的相关判定技巧,需要的朋友可以参考下
    2016-02-02
  • android实现QQ微信侧滑删除效果

    android实现QQ微信侧滑删除效果

    这篇文章主要为大家详细介绍了android实现QQ微信侧滑删除效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 浅谈一下Android的Activity

    浅谈一下Android的Activity

    这篇文章主要介绍了浅谈一下Android的Activity,活动是所有安卓应用程序的门面,凡事你在应用中看到的东西,都是放到活动中的,需要的朋友可以参考下
    2023-04-04
  • Android startActivityForResult的调用与封装详解

    Android startActivityForResult的调用与封装详解

    startActivityForResult 可以说是我们常用的一种操作了,目前有哪些方式实现 startActivityForResult 的功能呢?本文就来和大家详细聊聊
    2023-03-03

最新评论