随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

颜色矩阵是一个4x 5的矩阵,如下图:

让它和颜色分量RGBA相乘去改变RGBA的值

至于矩阵的运算就不多说了。下面给个示例演示ColorMatrix的使用:

MainActivity:

package com.home.colormatrix;import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.text.method.DigitsKeyListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;public class MainActivity extends Activity {private View view;private float[] values = new float[20];private MyView myView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);view = getView();setContentView(view);}/*** 得到页面布局* * @return*/private View getView() {// 根布局RelativeLayout root = new RelativeLayout(this);LinearLayout.LayoutParams rootlp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);root.setLayoutParams(rootlp);// 所有文本框根布局RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT);lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);LinearLayout editLayout = new LinearLayout(this);editLayout.setId(30);editLayout.setOrientation(LinearLayout.VERTICAL);root.addView(editLayout, lp);int index = 1;for (int i = 0; i < 4; i++) {// 每一行文本框根布局LinearLayout layout = new LinearLayout(this);LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);layout.setOrientation(LinearLayout.HORIZONTAL);editLayout.addView(layout, lp2);// 每一行的文本框for (int j = 0; j < 5; j++) {EditText et = new EditText(this);LinearLayout.LayoutParams lp3 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT, 1);et.setId(index++);et.setKeyListener(new DigitsKeyListener(false, true));et.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start,int before, int count) {myView.setValue(getData());myView.invalidate();}@Overridepublic void beforeTextChanged(CharSequence s, int start,int count, int after) {}@Overridepublic void afterTextChanged(Editable s) {}});layout.addView(et, lp3);}}// 图片布局myView = new MyView(this);RelativeLayout.LayoutParams viewlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT);viewlp.addRule(RelativeLayout.ABOVE, 30);root.addView(myView, viewlp);return root;}/*** 获取文本框里面的数据* * @return*/private float[] getData() {for (int i = 0; i < 20; i++) {EditText et = (EditText) view.findViewById(i + 1);String data = et.getText().toString();if (data == null || "".equals(data)) {values[i] = 0;} else {values[i] = Float.valueOf(data);}}return values;}
}

MyView:

package com.home.colormatrix;import com.home.testcolormatrix.R;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;public class MyView extends View {private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);private Bitmap bitmap;private float[] array = new float[20];public MyView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public MyView(Context context, AttributeSet attrs) {super(context, attrs);}public MyView(Context context) {super(context);bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.test);invalidate();}public void setValue(float[] array) {for (int i = 0; i < array.length; i++) {this.array[i] = array[i];}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);paint.setColorFilter(null);canvas.drawBitmap(bitmap, 0, 0, paint);ColorMatrix cm = new ColorMatrix();cm.set(array);paint.setColorFilter(new ColorMatrixColorFilter(cm));canvas.drawBitmap(bitmap, 0, 0, paint);}
}

给activity加上下面属性可以让UI和输入法隔离。

android:windowSoftInputMode="adjustResize"

颜色矩阵ColorMatrix的使用相关推荐

  1. ColorMatrix颜色矩阵让图片千变万化

    在自定义控件中最熟悉的就是Paint,Canvas,path,Matrix等,要想炫酷效果这几个类必不可少.Paint.setColorFilter(ColorFilter filter):设置颜色过 ...

  2. GdiPlus[59]: 图像(十一) IGPImageAttributes 之颜色矩阵(TGPColorMatrix)变换

    IGPMatrix 矩阵 是个接口, 要通过 TGPMatrix 实例化后使用, 其内置了很多方法和属性. TGPColorMatrix 只是一个结构体, 除了矩阵数据(5*5)外, 它只有一个方法: ...

  3. 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )

    文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...

  4. Egret中颜色矩阵和滤镜的使用与介绍

    一:颜色矩阵 颜色矩阵说明 颜色矩阵数据说明: 实际的颜色值由下面的公式决定: redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + ...

  5. Android色彩矩阵——ColorMatrix

    在Android的开发中,我们少不了对图片进行处理,其中最常使用的数据结构就是位图Bitmap,它包含了一张图片的所有数据. 既然是位图那它就是由一个个像素点组成的.每一个像素点都会有其对应的颜色值- ...

  6. [AS3][Matrix][利用颜色矩阵进行颜色变换]

    import  flash.filter.ColorMatrixFilter; 颜色矩阵:var arr:Array ; R   G   B   A  Off R   1    0   0   0   ...

  7. matlab_颜色矩阵三原色

    matlab绘图时,通过plottools调出的面板可以可视化选择曲线散点等图像的颜色,但这种方法只是人工肉眼识别,其实我们可以用三原色矩阵来控制图像颜色: 其中,纯红是[1 0 0],纯绿是[0 1 ...

  8. Android-Q颜色矩阵

    0 前言 颜色反转[2].夜间模式[3].显示白平衡[4].色彩校正[5].模拟颜色空间[6].强调色[7].护眼模式[8].色温调节[9]等显示效果都是通过颜色矩阵实现的,因此本文重点对其进行分析. ...

  9. ColorMatrix 5*5颜色矩阵

    ColorMatrix(色彩矩阵),是GDI+里用来调整图片色彩的矩阵. 什么是矩阵,说白了就是C#里的二维数组. 那么这个矩阵调整色彩的原理是什么,他是怎么来调整色彩的呢?这个要从线性代数里的矩阵相 ...

最新文章

  1. 单帧风景照变延时摄影,分分钟搞定,还能有昼夜变化,这是来自日本的开源动画景观算法...
  2. centos7 升级 gdb
  3. 工信部通告:任何组织和机构不得继续实施“计算机信息系统集成企业资质认定”...
  4. 尝试使用阿里云服务器
  5. java 不同包子类 覆盖_Java中不同方法的覆盖方法
  6. 2017.10.27 sue的小球 失败总结
  7. windows 安装pip 和 pychar 安装pymysql
  8. 韩顺平Java基础入门笔记-第一章
  9. STM32 固件包下载
  10. 电视盒子cpu天梯图 电视盒子CPU性能天梯图2022
  11. matlab数据拟合
  12. 在win中搭建IOS自动化
  13. 十代主板改win7_微星h410主板装win7系统及bios设置教程(支持10代usb)
  14. 阿里云大学:百度贴吧自动签到实现
  15. [Python GUI]Python内置图形界面tkinter Eye-Hand Coordination--游戏实战1
  16. github建立自己的个人网站
  17. 22-Consent 确认逻辑实现
  18. 专家称“988”心理健康热线是一次“变革”,但目前运营上面临困境
  19. DMAIC代表了六西格玛改进活动的五个阶段
  20. Win10 固定IP地址方法

热门文章

  1. STM32用Jlink仿真能正常运行,脱离仿真器硬件不能工作
  2. css实现图片和文字水平居中对齐
  3. 微信开发模式下如何进行自定义菜单配置
  4. 如何将html格式动态图表网页嵌入ppt中
  5. 百度LSS视频直播Android版Demo详细注释
  6. TablesOfContents.Add 方法 (python3处理Word添加目录)
  7. 如何做一名面霸?第一步:揣测面试官的内心
  8. IDEA导入项目时候报错怎么办?
  9. iOS自定义相机:带拍摄区域边框、半透明遮罩层、点击屏幕对焦、自动裁剪(含demo源码)
  10. ITDB公司电脑资产管理PHP系统出现空白页解决及中文版翻译方法