绘图机制ColorMatrix

我们可以通过Android系统提供的API,来进行ColorMatrix的修改,也可以精确的修改矩阵的值来实现颜色的效果。
这里是第二种:
public class PictureActivity extends AppCompatActivity {

ViewGroup grid = null;
EditText mEdit [] = new EditText[20];
Bitmap bitmap;
ImageView mImage;
Button changeButton;
Button restoreButton;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    setContentView(R.layout.picture_change);
    init();//初始化控件

    grid.post(new Runnable() {  我们无法再onCreat()方法中获得视图的宽高值,所以通过
                                //View的post方法,在视图创建完毕后获得宽高值。
        @Override这里写图片描述
        public void run() {

            add();//添加控件,动态加载ExitText
            Log.d("Pic",Thread.currentThread().getName()+"****");

            setDefaultValue();//设置初始的值

            changeButton.setOnClickListener(buttonListener);
           restoreButton.setOnClickListener(buttonListener);
        }
    });

}

//设置EditText默认值
private void setDefaultValue() {

    //for (int i = 0; i < grid.getChildCount(); i++) {
    for (int i = 0; i < mEdit.length; i++) {

        if (i % 6 == 0) {

            mEdit[i].setText(1+"");

        } else {

            mEdit[i].setText(0+"");
        }

    }

}

//添加控件
private void add() {

    for (int i = 0; i < 20; i++) {

        EditText edit = new EditText(PictureActivity.this);

        mEdit[i] = edit;

        grid.addView(edit,grid.getWidth() / 5, grid.getHeight() / 4);

    }

}

private void init() {

    changeButton = (Button)findViewById(R.id.changeButton);
    restoreButton = (Button)findViewById(R.id.restoreButton);

    grid = (ViewGroup) findViewById(R.id.grid);
    bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ttt);//从资源中得到bitmap类型的实例

    mImage = (ImageView)findViewById(R.id.mImageView);
    mImage.setImageBitmap(bitmap);

}

*

`
private void changePic(){*

Bitmap bitm = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Bitmap.Config.ARGB_8888);

   Canvas canvas = new Canvas(bitm);

    float[] array = getArray();  //当前矩阵值
   ColorMatrix colorMatrix = new ColorMatrix();
   colorMatrix.set(array);//获取输入的值将其传递给colorMatrix对象

   Paint paint = new Paint();

   paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));

   canvas.drawBitmap(bitmap,0,0,paint);
   mImage.setImageBitmap(bitm);
}

public float[] getArray() {

    float[] array = new float[mEdit.length];

    for (int i = 0; i < mEdit.length; i++){

        array[i] = Float.valueOf(mEdit[i].getText().toString());

    }
    return array;
}

private View.OnClickListener buttonListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        switch (v.getId()){
           case R.id.changeButton:
                changePic();

                break;
            case  R.id.restoreButton:

                //恢复原图
                restore();
                break;
        }
    }
};

private void restore() {

    init();
    setDefaultValue();
    changePic();

}

}

要加载的layout文件如下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值