前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android学习第三弹之Android图片颜色处理

Android学习第三弹之Android图片颜色处理

作者头像
非著名程序员
发布2018-02-01 16:19:01
5260
发布2018-02-01 16:19:01
举报
文章被收录于专栏:非著名程序员非著名程序员

Android之图片颜色处理

非著名程序员

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

处理之后:

代码语言:js
复制

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>

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

如果想要源码,请大家多多支持,分享到朋友圈,发送分享到朋友圈后的截屏和邮箱到此公众号,小编会争取第一时间把源码发送给您。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档