图片颜色处理

本文介绍了一个Android应用程序,通过SeekBar改变图片的颜色矩阵,实现红绿蓝通道和饱和度的调整。使用了Bitmap、Canvas、Paint等组件,并通过ColorMatrixColorFilter进行颜色效果的实时更新。
package com.example.test;

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.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.SeekBar;

public class TestImage2 extends AppCompatActivity {
private ImageView mIv;
    private SeekBar sb1,sb2,sb3,sb4;
    private  Bitmap bitmap2;
    private Canvas canvas;
    private Paint paint;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_image2);
        mIv= (ImageView) findViewById(R.id.iv_textimage);
        sb1= (SeekBar) findViewById(R.id.sb1);
        sb2= (SeekBar) findViewById(R.id.sb2);
        sb3= (SeekBar) findViewById(R.id.sb3);
        sb4= (SeekBar) findViewById(R.id.sb4);
        final Bitmap bitmap1= BitmapFactory.decodeResource(getResources(),R.drawable.test);
        bitmap2=Bitmap.createBitmap(bitmap1.getWidth(),bitmap1.getHeight(),bitmap1.getConfig());
        canvas=new Canvas(bitmap2);
        paint=new Paint();
        paint.setColor(Color.BLACK);
        final Matrix matrix=new Matrix();
        final ColorMatrix cm=new ColorMatrix();
        canvas.drawBitmap(bitmap1,matrix,paint);
        mIv.setImageBitmap(bitmap2);
        sb1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override//开始拖动
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override//停止拖动
            public void onStopTrackingTouch(SeekBar seekBar) {
                int progress=seekBar.getProgress();
                cm.set(new float[]{
                        progress/128.0f,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(bitmap1,matrix,paint);
                mIv.setImageBitmap(bitmap2);

            }
        });

        sb2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                int progress=seekBar.getProgress();
                cm.set(new float[]{
                        1,0,0,0,0,
                        0,progress/128.0f,0,0,0,
                        0,0,1,0,0,
                        0,0,0,1,0
                });
                paint.setColorFilter(new ColorMatrixColorFilter(cm));//设置图形颜色矩阵
                canvas.drawBitmap(bitmap1,matrix,paint);
                mIv.setImageBitmap(bitmap2);
            }
        });

        sb3.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @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/128.0f,0,0,
                        0,0,0,1,0
                });
                paint.setColorFilter(new ColorMatrixColorFilter(cm));//设置图形颜色矩阵
                canvas.drawBitmap(bitmap1,matrix,paint);
                mIv.setImageBitmap(bitmap2);
            }
        });
        //更改饱和度
        sb4.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                int progress=seekBar.getProgress();
                cm.set(new float[]{
                        progress/128.0f,0,0,0,0,
                        0,progress/128.0f,0,0,0,
                        0,0,progress/128.0f,0,0,
                        0,0,0,1,0
                });
                paint.setColorFilter(new ColorMatrixColorFilter(cm));//设置图形颜色矩阵
                canvas.drawBitmap(bitmap1,matrix,paint);
                mIv.setImageBitmap(bitmap2);
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<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:orientation="vertical"
    tools:context="com.example.test.TestImage2">
<ImageView
    android:id="@+id/iv_textimage"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    />
    <SeekBar
        android:id="@+id/sb1"
        android:max="255"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <SeekBar
        android:id="@+id/sb2"
        android:max="255"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <SeekBar
        android:id="@+id/sb3"
        android:max="255"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <SeekBar
        android:id="@+id/sb4"
        android:max="255"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

转载于:https://www.cnblogs.com/jiang2538406936/p/6029307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值