rgb矩阵Android程序,Android ColorMatrixColorFilter
Android ( ColorMatrixColorFilter ) 颜色矩阵颜色滤镜通过一个 4x 5 的颜色矩阵来变换颜色,可以修改像素的饱和度,将 YUV 转换成 RGB 等
相关知识
RGB
RGB 就是红绿蓝,光的三基色
Red 红
Green 绿
Blue 蓝
RGBA 模型
RGBA 就是 RGB + Alpha (透明度)
色调/色相
三原色指色彩中不能再分解的三种基本颜色,通常说的三原色,即品红、黄、青 (是青不是蓝,蓝是品红和青混合的颜色)
三原色可以混合出所有的颜色,同时相加为黑色,黑白灰属于无色系
三原色是物体传递的颜色
饱和度
颜色的纯度,从 0(灰) 到 100%(饱和) 来进行描述
亮度/明度
颜色的相对明暗程度
ColorMatrix
颜色矩阵( 4x5 ),我们可以修改矩阵中的值,来实现黑白照,泛黄老照片,高对比度等效果
手撕颜色矩阵解释图如下
拿颜色矩阵的每一行来 * 颜色矩阵分量的每一列
很典型的一个例子,处理前后的结果比较,我们还可以让 某个颜色值 * 一个常数 ,比如让第三行(蓝)乘以 2,效果就变成泛蓝色了
验证 ColorMatrix 所起的作用
一个 ImageView,4x5 个 EditText,一个重置按钮和一个生成按钮,
依次是原图,泛黄,泛绿,泛红,高对比度,色相变换,以及黄色复古
创建一个 空的 Android 项目 cn.twle.android.ColorMatrix
修改布局文件 activity_main.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="5dp">
android:id="@+id/img_show"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2" />
android:id="@+id/gp_matrix"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:columnCount="5"
android:rowCount="4">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:id="@+id/btn_reset"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="重置" />
android:id="@+id/btn_Change"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="变换" />
修改 MainActivity.java
package cn.twle.android.colormatrix;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridLayout;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ImageView img_show;
private GridLayout gp_matrix;
private Button btn_reset;
private Button btn_Change;
private Bitmap mBitmap;
private int mEtWidth, mEtHeight;
private EditText[] mEts = new EditText[20];
private float[] mColorMatrix = new float[20];
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
bindViews();
gp_matrix.post(new Runnable() {
@Override
public void run() {
mEtWidth = gp_matrix.getWidth() / 5;
mEtHeight = gp_matrix.getHeight() / 4;
//添加5 * 4个EditText
for (int i = 0; i < 20; i++) {
EditText editText = new EditText(mContext);
mEts[i] = editText;
gp_matrix.addView(editText, mEtWidth, mEtHeight);
}
initMatrix();
}
});
}
private void bindViews() {
img_show = (ImageView) findViewById(R.id.img_show);
gp_matrix = (GridLayout) findViewById(R.id.gp_matrix);
btn_reset = (Button) findViewById(R.id.btn_reset);
btn_Change = (Button) findViewById(R.id.btn_Change);
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.mychild);
img_show.setImageBitmap(mBitmap);
btn_reset.setOnClickListener(this);
btn_Change.setOnClickListener(this);
}
//定义一个初始化颜色矩阵的方法
private void initMatrix() {
for (int i = 0; i < 20; i++) {
if (i % 6 == 0) {
mEts[i].setText(String.valueOf(1));
} else {
mEts[i].setText(String.valueOf(0));
}
}
}
//定义一个获取矩阵值得方法
private void getMatrix() {
for (int i = 0; i < 20; i++) {
mColorMatrix[i] = Float.valueOf(mEts[i].getText().toString());
}
}
//根据颜色矩阵的值来处理图片
private void setImageMatrix() {
Bitmap bmp = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.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(mBitmap, 0, 0, paint);
img_show.setImageBitmap(bmp);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_Change:
getMatrix();
setImageMatrix();
break;
case R.id.btn_reset:
initMatrix();
getMatrix();
setImageMatrix();
break;
}
}
}
post() 方法是为了保证 GridLayout 加载完毕后才去获取长宽,不然在获取 GridLayout 长
宽的时候可是获取不到值的
参考文档
rgb矩阵Android程序,Android ColorMatrixColorFilter相关推荐
- 时间计时android程序,Android 时间计时器控件 Chronometer
当你想要显示时间的推移而不是进程的增加的时候,可以使用Chronometer作为一个计时器.当需要记录用户进行某项操作所消耗的时间的时候,或者在游戏中需要限制时间时候,它将非常实用. 这里,Chron ...
- 任意的android程序,Android任意位置获取应用Context
在编写某些自定义类时,无法方便的取得Context(Activity或Application),例如需要获取res资源,取些drawable或string之类的,通常会比较麻烦. 解决方法一般有: 1 ...
- 独数游戏android程序,Android 数独小游戏
先看看效果图 sudoku-o3.gif 数独设计思路 先看布局,我们可以看到数独由9x9的格子组成,每个格子中间有一个数字. Cell (单个格子.android 中我们可以先用TextView代替 ...
- android开发图片格式,Android程序开发如何处理图像格式类及图像转换
在Android程序开发过程中,明确哪些图像格式类(ImageFormat.PixelFormat及BitmapConfig等)及图像(JPG.PNG及BMP等)的转换方式非常重要,在以后的程序开发过 ...
- Unity3D移植到自己的Android程序
用Unity3D开发需要把动画效果移植到现有的APP上面.Unity for Android 比较特殊,Unity for IOS 打包是将XCODE工程直接交给开发者,开发者可以在工程的基础上继续添 ...
- Android -- 程序启动画面 Splash
很多应用都会有一个启动界面.欢迎画面慢慢隐现,然后慢慢消隐. 我的方式是使用两个Activity,程序启动时候load第一张Activity,然后由tick触发N秒钟后startActivity另外一 ...
- android程序安装后图标不显示
本文主要介绍android应用程序安装后图标不显示的几个可能原因. 自己写的程序突然安装后图标不见了,在应用程序安装中能找到,但是桌面上就是没有图标,启动只能从最近列表中其中..一般这种情况只会在服务 ...
- android程序在调试时出现了套接字异常“java.net.SocketException: Permission denied”该如何解决...
Socket不能对外连接,错误不会被报出,调试的时候,能看到Exception, 一般是抛出 java.net.socketexception permission denied这个异常.只要你的程序 ...
- Android程序员的技术要求和学习路线
转载自知乎上关于Android程序员技术等级标准的回答: 如上图所描述的技能要求,可分为下面几大模块: 通用知识 编程语言 Android 编码与设计 工具和方法 对应学习线路如下 书籍准备: 1.疯 ...
- Android 程序自动更新功能模块实现
2019独角兽企业重金招聘Python工程师标准>>> Android 程序自动更新功能模块实现 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程 ...
最新文章
- Delphi - 新语法介绍之For In
- Duilib vlc c++ 字符编码
- 循序渐进学Python2变量与输入
- udp怎么保证不丢包_在 Flink 算子中使用多线程如何保证不丢数据?
- MySQL主从复制遇到的问题以及如何解决
- Android将应用调试log信息保存在SD卡
- [在线小说系统源码]精品微信小程序小说阅读器+后台管理系统|前后分离VUE[包运行成功]
- 国密(1) - 私钥Key文件( PEM格式)编解码方法
- 苹果电脑桌面计算机图标不见了怎么办,苹果电脑桌面文件都不见了怎么显示
- 移动游戏运营必备的数据分析指标
- android 获取快捷开关_Android11新功能汇总,悬浮聊天气泡、快捷开关颜色可调整等...
- css中的position和float属性
- DynamoDB安装及配置
- 人工智能的三个发展阶段
- 【R语言】必学包之plyr包
- 【云原生】阿里云ACK部署MySQL 数据持久化存储
- 从UEFI安装服务器系统,UEFI+GPT模式安装Windows server 2008 R2教程
- 计算机升级在线,电脑ipad在线升级的方法
- linux文件对用户隐藏,Linux就该这么学-文件的特殊权限、隐藏权限
- jquery 监听td点击事件_React 事件 | 1. React 中的事件委托
热门文章
- 关于在GridControl中添加GridLookUpEdit绑定数据
- jQuery2.x源码解析(设计篇)
- ecshop 实现购物车退出不清空
- WEBFORM--第一讲
- CMake实践(2)
- 杭电1085(多重背包求解)
- 在word表格里打勾和打叉
- WinForm中显示韩语,韩文
- MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]
- java图片像素90翻转_java后台解决上传图片翻转90的问题,有demo,经过测试可用...