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 socket编程、android编程权威指南、android 网络编程,以便于您获取更多的相关知识。

时间: 2024-09-14 10:36:34

Android编程之图片颜色处理方法_Android的相关文章

Android编程中图片特效处理方法小结_Android

本文实例总结了Android编程中图片特效处理方法.分享给大家供大家参考,具体如下: 这里介绍的Android图片处理方法包括: 转换 -  drawable To  bitmap 缩放 -  Zoom 圆角 -  Round Corner 倒影 -  Reflected bitmapPrcess  code: package com.learn.games; import android.graphics.Bitmap; import android.graphics.Canvas; impo

Android编程实现图片透明的方法

本文实例讲述了Android编程实现图片透明的方法.分享给大家供大家参考,具体如下: 今天弄了一个图片的透明方法. 效果图: 目录结构 main.xml <?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android" android:orientation="

Android编程中图片特效处理方法小结

本文实例总结了Android编程中图片特效处理方法.分享给大家供大家参考,具体如下: 这里介绍的Android图片处理方法包括: 转换 -  drawable To  bitmap 缩放 -  Zoom 圆角 -  Round Corner 倒影 -  Reflected bitmapPrcess  code: package com.learn.games; import android.graphics.Bitmap; import android.graphics.Canvas; impo

Android编程获取图片数据的方法详解

本文实例讲述了Android编程获取图片数据的方法.分享给大家供大家参考,具体如下: 网络的访问在我们日常生活中太重要了,如果没有网络我们的生活将会是什么样子呢?Android手机和浏览器也是一样的,也可以通过网络通讯获取数据,如调用webservice,EJB等.下面就通过一个小例子从网络获取一幅图片并显示在手机上,开发中将会使用到一个新的组件ImageView. 1. 写一个用来处理字节流的工具类 package org.lxh.util; import java.io.ByteArrayO

Android编程之阴影(Shadow)制作方法_Android

本文实例讲述了Android编程之阴影(Shadow)制作方法.分享给大家供大家参考,具体如下: 先看运行效果图如下: 阴影制作:包括各种形状(矩形,圆形等等),以及文字等等都能设置阴影. 阴影制作是什么原理呢? 其实很简单,你需要设置阴影的东西被看作一个主层.然后在主层下面画一个阴影层. 阴影制作涉及到一个重要函数: public void setShadowLayer (float radius, float dx, float dy, int color) 参数: radius:阴影半径

android编程实现图片库的封装方法_Android

本文实例讲述了android编程实现图片库的封装方法.分享给大家供大家参考,具体如下: 大家在做安卓应用的时候 经常要从网络中获取图片 都是通过URL去获取 可是如果本地有图片数据 从本地获取数据不更加快一些 自己在工作中遇到这个问题 所以采用了一个URL和本地图片的一个映射关系 先从本地区获取 假如本地没有再从网络中获取 本方法考虑到多线程问题 欢迎大家一起共同探讨! public class PictureLibrary { /* * 图片库的操作 */ File file; URL url

Android实现简单图片压缩的方法_Android

本文实例讲述了Android实现简单图片压缩的方法.分享给大家供大家参考,具体如下: 在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图

Android编程实现圆角边框的方法_Android

本文实例讲述了Android编程实现圆角边框的方法.分享给大家供大家参考,具体如下: 设置边框圆角可以在drawable-mdpi目录里定义一个xml: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="

Android编程之监听器的实现方法_Android

本文实例讲述了Android编程之监听器的实现方法.分享给大家供大家参考,具体如下: 1.通过内部类实现监听器,将事件监听器定义成当前的内部类,使用内部类可以在当前类中复用监听器. 第一步: 写监听器类,覆盖对应的抽象方法 第二步:创建监听器对象 第三步:注册 以一个button为例,代码如下: package cn.csdn.android.tesxt; import android.app.Activity; import android.content.DialogInterface; i