此次实验主要通过Android中的方法获取输入的颜色矩阵的值,更改后赋值给图片中的颜色矩阵更改图片效果。具体的布局的方法跟笔记1种差不多,只不过这里要添加一个供用户输入的GridView

   <GridLayout
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:rowCount="4"
android:columnCount="5"> </GridLayout>

  同时定义两个Button分别实现更改和重置功能,定义ImageView展示图片。

  新建colorMatrix类,实现对颜色矩阵的相关操作。

  首先,在创建方法中显示原图,并对相应的组建进行初始化操作。

 bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
mImageView = (ImageView) findViewById(R.id.imageView);
mGroup = (GridLayout) findViewById(R.id.group);
mImageView.setImageBitmap(bitmap);

  在oncreate方法中不能获得控件的宽和高,所以需要使用post方法

 mGroup.post(new Runnable() {

             @Override
public void run() {
// TODO Auto-generated method stub
mEtWidth = mGroup.getWidth() / 5;
mEtHeight = mGroup.getHeight() / 4;
addEts();
matrixInit();
}
});

  这样在控件绘制完毕之后执行Runnable方法获得控件的高和宽。这里由于是颜色矩阵是一个4行5列的矩阵,所以,需要得到每个editText的宽和高,最后使用一个循环进行添加editText操作。

 private void addEts() {
for (int i = 0; i < 20; i++) {
EditText editText = new EditText(colorMatrix.this);
mEts[i] = editText;
mGroup.addView(editText, mEtWidth, mEtHeight);
}
}

  

 private void matrixInit() {
for (int i = 0; i < 20; i++) {
if (i % 6 == 0) {
mEts[i].setText(String.valueOf(1));
} else {
mEts[i].setText(String.valueOf(0));
}
}
}

  添加完成后,我们需要对矩阵进行初始化操作,这里就要用到颜色矩阵的相关知识。

  颜色矩阵4行5列,初始状态如图。

  

  从上到下四行分别控制R,G,B,A,第5列可以在原有基础上增减相应的值,类似于前面的方阵是系数矩阵成倍进行调整,后面是一个常数项进行微调。

  添加editText操纵和初始化操作结束之后,我们就得到了初始界面。以上就结束了onCreate方法中的相关创建操作。

  

  下面我们就要实现如何通过editText中的值实现对颜色矩阵的更改进而更改图片。

  

  首先我们要获取输入的editText中的值存入数组中。

    public void getMatrix() {
for (int i = 0; i < 20; i++) {
mColorMatrix[i] = Float.valueOf(mEts[i].getText().toString());
}
} 

  获得值后,就要更改图片的颜色矩阵,笔记1中已经讲到,我们是不能对传入的bitmap进行直接修改的,需要得到它的一个复制,因此,我们实际上是在画布上画修改后的复制。

  我们通过ColorMatrix的set方法,将数组转化为颜色矩阵,,然后使用画笔将颜色矩阵画入画布即可。

 private void setImageMatrix() {
Bitmap bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),
Bitmap.Config.ARGB_8888);
android.graphics.ColorMatrix colorMatrix = new android.graphics.ColorMatrix();
colorMatrix.set(mColorMatrix); // 将数组传递进来使其变为颜色矩阵 Canvas canvas = new Canvas(bmp);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); // 抗锯齿 paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
canvas.drawBitmap(bitmap, 0, 0, paint);
mImageView.setImageBitmap(bmp);
}

  最后实现Button的点击事件,改变图片时,我们需要首先获取颜色矩阵,然后将颜色矩阵作用在图片上输出即可。

  reset时,同样要重置颜色矩阵,作用在图片上,在这里,getMatrix相当于是一个桥梁,将用户界面的输入和程序对图片的处理联系起来。

 public void btnChange(View view) {
getMatrix();
setImageMatrix();
} public void btnReset(View view) {
matrixInit();
getMatrix();
setImageMatrix();
}

  最后不要忘记在main_Activity中启动相关的类,并且在配置文件中对新建的Activity进行登记。

  至此,仿照慕课上的关于颜色矩阵的程序已经完成,思路还算比较清晰,在测试中遇到了一个小问题,测试的手机比较老了(安卓2.3)因此,在初始化界面的时候,颜色矩阵的输入界面总是显示不全,换了高版本的成功运行了。开发中要考虑不同的运行环境。

  

  

Android图像处理2的更多相关文章

  1. android 图像处理系列合集

    为了便于大家对滤镜算法的学习,以后发布的图像处理滤镜系列帖子会在这里汇总,本人第一次写合集,写得不好的地方大家请见谅,手头上虽然有一些滤镜的算法,但是大多不是android版的,教程里的代码大多是我借 ...

  2. Android图像处理实例教程

    Android图像处理实例教程 原始出处 http://vaero.blog.51cto.com/4350852/856750

  3. Android图像处理1

    项目开发要用,在慕课中学习了一下关于Android图像处理的相关功能,并进行了整理. 在Android中,我们通过最基本的改变图像的RGBA值,改变图像的颜色与饱和度. Android中有ColorM ...

  4. Android图像处理 - 高斯模糊的原理及实现

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 由 天天P图攻城狮 发布在云+社区 作者简介:damonxia(夏正冬),天天P图Android工程师 前言 高斯模糊是图像处理中几乎每个程序员 ...

  5. android图像处理系列之四-- 给图片添加边框(上)

    图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法. 基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下 ...

  6. android图像处理系列之五-- 给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  7. android图像处理系列之四--给图片添加边框(上)

    图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法. 基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下 ...

  8. android图像处理系列之五--给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  9. android图像处理系列之七--图片涂鸦,水印-图片叠加

    图片涂鸦和水印其实是一个功能,实现的方式是一样的,就是一张大图片和一张小点图片叠加即可.前面在android图像处理系列之六--给图片添加边框(下)-图片叠加中也讲到了图片叠加,里面实现的原理是直接操 ...

  10. Android图像处理之Bitmap类

      Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现 ...

随机推荐

  1. 使用Loadrunner进行接口测试

    在工作中很多时候都需要进行接口测试,如果只是进行接口的功能测试这个很简单,两种类型: 1.如果是基于get的直接使用浏览器进行访问,查看服务器返回的数据是否正确就行, 2.如果是基于post的可以接触 ...

  2. 防火墙导致FTP传输文件为0

    在使用 ftpClient 传输文件到FTPserver时,在别的机器上可以正常使用,但是到自己的机器有就始终是0文件,发现是Mcafee 防火墙导致的,只要让防火墙放行即可. Mcafee防火墙的放 ...

  3. Wing IDE 5 for Python 安装及破解方法

    安装Wing IDE 官网下载deb安装文件 开始安装程序 dpkg -i 文件名.deb 安装完成后打开注册界面,输入下面的License ID 后得到RequestCode,将RequestCod ...

  4. [改善Java代码]覆写变长方法也循规蹈矩

    建议6:覆写变长方法也循规蹈矩 在Java中,子类覆写父类中的方法很常见,这样做既可以修正Bug也可以提供扩展的业务功能支持,同时还符合开闭原则(Open-Closed Principle),我们来看 ...

  5. 关于Eclipse中校验输入文件名的源代码

    Eclipse中测试文件名的方法. 也没有单独的分操作系统.在Talend时解决一个在文本框中输入名字有Bug的一个问题,这个是Eclipse中解决输入名字,对名字校验的部分源码. public IS ...

  6. 命名管道FIFO

    首先我得检讨一下自己,这几天有些颓呀,打不起精神,板子出了点问题,果真自学还是很困难呀,硬件方面难解决呀,理想与现实还是很有差距的,伤透了,凌乱了. 一直在理解进程间通信的问题.发现上次忽略了一个问题 ...

  7. hdu 4670 树的点分治

    思路:首先当然是要用树的点分治了.根节点为root,那么经过root的合法路径数求出来这题就解决了.因为我们可以用分治枚举根,最后将所有根的路径数加起来就是结果.当然这里的根不是整棵树的根,是子树根. ...

  8. web项目的两个创建形式website和webapplication(转)

    前言 在利用VS2010创建web项目的时候,会有两个选择.可以选择直接创建website网站,还可以选择使用 webapplication应用程序.刚刚接触web开发,看到这两个就疑惑了,既然是都可 ...

  9. ASP.NET二级域名站点共享Session状态

    我的前面一篇文章提到了如何在使用了ASP.NET form authentication的二级站点之间共享登陆状态, http://www.cnblogs.com/jzywh/archive/2007 ...

  10. IntellJ 13.x JPA Persistence Sample

    跟上一篇差不多,一些基本的东西. 这次是JPA + Spring MVC 3.0 1.建立Project 2.Add JPA Support 3.我们以Hibernate为例,设置JPA的Provid ...