个人练习代码库/ColorMatrix/色调、饱和度、亮度调整

1.创建实例化Bitmap Bitmap.config.ARGB_8888->每个像素存储在4字节上,每通道8位精度

2.设置偏移量,颜色参数和色光属性,通过postConcat混合属性

tips:在设置好处理的颜色矩阵后,用SetColorFilter方法new一个ColorMatrixColorFilter

3.在主方法中,设置图片,实例化,设置初始点progress/Seekbar     监听事件中添加逻辑

代码:

ImageHelper
public class ImageHelper {
    public static Bitmap handleImageEffect(Bitmap bm,float hue ,float saturation, float lum){
        Bitmap bmp=Bitmap.createBitmap(bm.getWidth(),bm.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas=new Canvas(bmp);
        Paint paint=new Paint();

        ColorMatrix mHueMatrix=new ColorMatrix();
        mHueMatrix.setRotate(0,hue);
        mHueMatrix.setRotate(1,hue);
        mHueMatrix.setRotate(2,hue);

        ColorMatrix mSaturation=new ColorMatrix();
        mSaturation.setSaturation(saturation);

        ColorMatrix mLum=new ColorMatrix();
        mLum.setScale(lum,lum,lum,1);

        ColorMatrix mImage=new ColorMatrix();
        mImage.postConcat(mHueMatrix);
        mImage.postConcat(mLum);
        mImage.postConcat(mSaturation);

        paint.setColorFilter(new ColorMatrixColorFilter(mImage));
        canvas.drawBitmap(bm,0,0,paint);
        return bmp;
    }

MainAc:

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ColorMatrix;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.SeekBar;

/**
 * Created by YRC on 2017/10/21.
 */
public class PrimaryColor extends Activity implements SeekBar.OnSeekBarChangeListener {

    private static int MID_VALUE = 127;
    private ImageView mImageView;
    private float mHue, mStauration, mLum;
    private Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.primary_color);
        bitmap = BitmapFactory.decodeResource(getResources(),
                R.drawable.test3);
        mImageView = (ImageView) findViewById(R.id.imageview);
        SeekBar mSeekbarhue = (SeekBar) findViewById(R.id.seekbarHue);
        SeekBar mSeekbarSaturation = (SeekBar) findViewById(R.id.seekbarSaturation);
        SeekBar mSeekbarLum = (SeekBar) findViewById(R.id.seekbatLum);
        mSeekbarhue.setOnSeekBarChangeListener(this);
        mSeekbarSaturation.setOnSeekBarChangeListener(this);
        mSeekbarLum.setOnSeekBarChangeListener(this);
        int MAX_VALUE = 255;
        mSeekbarhue.setMax(MAX_VALUE);
        mSeekbarSaturation.setMax(MAX_VALUE);
        mSeekbarLum.setMax(MAX_VALUE);
        mSeekbarhue.setProgress(MID_VALUE);
        mSeekbarSaturation.setProgress(MID_VALUE);
        mSeekbarLum.setProgress(MID_VALUE);
        mImageView.setImageBitmap(bitmap);
    }

    @Override
    public void onProgressChanged(SeekBar seekBar,
                                  int progress, boolean fromUser) {
        switch (seekBar.getId()) {
            case R.id.seekbarHue:
                mHue = (progress - MID_VALUE) * 1.0F / MID_VALUE * 180;
                break;
            case R.id.seekbarSaturation:
                mStauration = progress * 1.0F / MID_VALUE;
                break;
            case R.id.seekbatLum:
                mLum = progress * 1.0F / MID_VALUE;
                break;
        }
        mImageView.setImageBitmap(ImageHelper.handleImageEffect(
                bitmap, mHue, mStauration, mLum));
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
    }

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值