颜色矩阵ColorMatrix的使用
随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(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的使用相关推荐
- ColorMatrix颜色矩阵让图片千变万化
在自定义控件中最熟悉的就是Paint,Canvas,path,Matrix等,要想炫酷效果这几个类必不可少.Paint.setColorFilter(ColorFilter filter):设置颜色过 ...
- GdiPlus[59]: 图像(十一) IGPImageAttributes 之颜色矩阵(TGPColorMatrix)变换
IGPMatrix 矩阵 是个接口, 要通过 TGPMatrix 实例化后使用, 其内置了很多方法和属性. TGPColorMatrix 只是一个结构体, 除了矩阵数据(5*5)外, 它只有一个方法: ...
- 【Android 应用开发】Paint 滤镜原理 之 颜色矩阵 ( 颜色模式 | 颜色通道 | 颜色矩阵 | 矩阵运算 | 矩阵乘法 | 矩阵加法 | 颜色矩阵深入解析 )
文章目录 颜色模式 颜色通道 Android 中的颜色矩阵 矩阵乘法运算 滤镜中的矩阵乘法运算 矩阵加法运算 滤镜中的矩阵乘法运算 滤镜运算原理 ( 总结 ) 实际滤镜理论示例 颜色模式 颜色模式 : ...
- Egret中颜色矩阵和滤镜的使用与介绍
一:颜色矩阵 颜色矩阵说明 颜色矩阵数据说明: 实际的颜色值由下面的公式决定: redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + ...
- Android色彩矩阵——ColorMatrix
在Android的开发中,我们少不了对图片进行处理,其中最常使用的数据结构就是位图Bitmap,它包含了一张图片的所有数据. 既然是位图那它就是由一个个像素点组成的.每一个像素点都会有其对应的颜色值- ...
- [AS3][Matrix][利用颜色矩阵进行颜色变换]
import flash.filter.ColorMatrixFilter; 颜色矩阵:var arr:Array ; R G B A Off R 1 0 0 0 ...
- matlab_颜色矩阵三原色
matlab绘图时,通过plottools调出的面板可以可视化选择曲线散点等图像的颜色,但这种方法只是人工肉眼识别,其实我们可以用三原色矩阵来控制图像颜色: 其中,纯红是[1 0 0],纯绿是[0 1 ...
- Android-Q颜色矩阵
0 前言 颜色反转[2].夜间模式[3].显示白平衡[4].色彩校正[5].模拟颜色空间[6].强调色[7].护眼模式[8].色温调节[9]等显示效果都是通过颜色矩阵实现的,因此本文重点对其进行分析. ...
- ColorMatrix 5*5颜色矩阵
ColorMatrix(色彩矩阵),是GDI+里用来调整图片色彩的矩阵. 什么是矩阵,说白了就是C#里的二维数组. 那么这个矩阵调整色彩的原理是什么,他是怎么来调整色彩的呢?这个要从线性代数里的矩阵相 ...
最新文章
- 单帧风景照变延时摄影,分分钟搞定,还能有昼夜变化,这是来自日本的开源动画景观算法...
- centos7 升级 gdb
- 工信部通告:任何组织和机构不得继续实施“计算机信息系统集成企业资质认定”...
- 尝试使用阿里云服务器
- java 不同包子类 覆盖_Java中不同方法的覆盖方法
- 2017.10.27 sue的小球 失败总结
- windows 安装pip 和 pychar 安装pymysql
- 韩顺平Java基础入门笔记-第一章
- STM32 固件包下载
- 电视盒子cpu天梯图 电视盒子CPU性能天梯图2022
- matlab数据拟合
- 在win中搭建IOS自动化
- 十代主板改win7_微星h410主板装win7系统及bios设置教程(支持10代usb)
- 阿里云大学:百度贴吧自动签到实现
- [Python GUI]Python内置图形界面tkinter Eye-Hand Coordination--游戏实战1
- github建立自己的个人网站
- 22-Consent 确认逻辑实现
- 专家称“988”心理健康热线是一次“变革”,但目前运营上面临困境
- DMAIC代表了六西格玛改进活动的五个阶段
- Win10 固定IP地址方法