什么是ColorMatrix

2024-01-06 02:18
文章标签 colormatrix

本文主要是介绍什么是ColorMatrix,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ColorMatrix(色彩矩阵),是GDI+里用来调整图片色彩的矩阵。
什么是矩阵,说白了就是C#里的二维数组。
那么这个矩阵调整色彩的原理是什么,他是怎么来调整色彩的呢?这个要从线性代数里的矩阵相乘说起。
以下段落学过线性代数的读者可以跳过,这里我用自己的理解来描述下矩阵相乘的算法和结果。


在线性代数里,两个矩阵相乘,是这样计算的:
A矩阵乘以B矩阵,那么新生成一个矩阵C,C的第N行M列的元素等于A的N行和B的M列逐个元素相乘的和。新生成的矩阵行数等于A的行数,列数等于B的列数。
另外A和B需要满足,A的列数等于B的行数。这就是为了保证,A的每一行上每个元素都能B的每一列上每个元素都能相乘。
即A[m,n] X B[n,p] = C[m,p]
直观的描述下,有矩阵A[2,3]
{
1,2,3
4,5,6
}
和矩阵B[3,2]
{
7 , 8
9 , 10
11, 12


}
那么相乘后生成新矩阵C[2,2]
{
1*7+2*9+3*11,1*8+2*10+3*12
4*7+5*9+6*11,4*8+5*10+6*12
}
好了,矩阵的概念描述到此。以下就说说GDI+里的色彩矩阵。


在计算机里,一副图片可以看成是点的集合。虽然图片有宽和高的概念,看起来是二维的,其实在处理时我们完全可以把宽、高看成是图片的属性,和点无关,把图片的所有点看成是一维数组。
而点本身是红绿蓝的集合,现在计算图形中再加入一个Alpha值(表示透明度),那么就是4个属性的集合,这样一副图片就成了二维的数组了,也就是标准的矩阵了。
那么一副4个点的图片描述成矩阵就是P[4,4]
{
R1,G1,B1,A1
R2,G2,B2,A2
R3,G3,B3,A3
R4,G4,B4,A4
}
当我们把这个矩阵和另一个4X4的矩阵M
{
rr,gr,br,ar
rg,gg,bg,ag
rb,gb,bb,ab
ra,ga,ba,aa
}
相乘时,就会生成一个新的矩阵,新矩阵和原矩阵元素数量相同(不信可以用[5,4]、[6,4]矩阵和它相乘看看),并且新矩阵的每个元素,都发生了有趣的变化。我们来看看结果,新矩阵NP:
{
R1*rr+G1*rg+B1*rb+A1*ra,R1*gr+G1*gg+B1*gb+A1*ga,R1*br+G1*rg+B1*bb+A1*ba,R1*ar+G1*ag+B1*ab+A1*aa
......
......
......
}
可以看到,新矩阵第一行(也就是新的图片的第一个点)的R,G,B,A都等于原图片的第一个点的所有RGBA新的混合值了。也就说,通过矩阵相乘,可以在图片原来的基础上改变新图片RGBA各个分量的值。
同时也能看出来我为什么把M矩阵的各个元素这么命名:rr表示新生成的R分量中原R分量的比例,gr表示新生成G分量中原R分量的比例,br表示新生成的B分量中原R分量的比例。依此类推。


另外再说一点,那就是GDI+中ColorMatrix是个5X5的矩阵,而不是4X4的矩阵,为什么会多出1行和1列呢。
我们来看NP,他的第一个元素是R1*rr+G1*rg+B1*rb+A1*ra,看出什么了吗?那就是只能做3个元素的加法,而不能做负值运算,即如果我想做R1的反色运算(用255减去原来的值)就做不到了,所以GDI+在原来的基础上扩展了一维,虚拟的一维W,这样一个点就变成了R,G,B,A,W。这个多出来的W在平时是不存在的,只有在色彩矩阵运算时才起辅助作用,默认就是255。
我们看加了一维W后NP第一个元素的结果
R1*rr+G1*rg+B1*rb+A1*ra+W1*rw
这样,将rw设为1,rr设为-1,其他为0,那么结果就是255-R1,怎么样,反色运算能完成了。

 

这篇关于什么是ColorMatrix的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/574912

相关文章

Android学习笔记之ColorMatrix、图像处理

飞呀 1.色彩矩阵1.1改变偏移量1.2改变颜色系数 2.使用ColorMatrix来改变图片的色光属性2.1 色调2.2 饱和度2.3 亮度2.4 效果混合postConcat2.5 示例 3.使用颜色矩阵来改变图片3.1几种图片颜色矩阵处理效果3.1.1 灰度效果3.1.2 图像颜色反转3.1.3 怀旧效果3.1.4 去色效果3.1.5 高饱和度 4.像素点分析4.1常用图像像素点处理

Android 颜色矩阵——ColorMatrix

Android 颜色矩阵——ColorMatrix 1.xml文件 通过GridLayout来进行布局,动态的添加EditText <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http:/

Android学习笔记之二:矩阵ColorMatrix实现图片ARGB变化

Android中ColorMatrix类包含一个5x4的数字矩阵用于变换图片的color值,矩阵存储在一个长度为20的一维数组中当提供一个RGBA颜色的时候,它会做出这样的变化得到新颜色。该类中常用方法可以参考API文档或博客:http://blog.csdn.net/hahajluzxb/article/details/8161725。今天学习的目标是在GridLayout中放置20个

自定义控件三部曲之绘图篇(八)——Paint之ColorMatrix与滤镜效果

这篇主要讲解ColorMatrix的相关知识,这里将涉及到矩阵乘法的相关知识。所以这篇是比较有难度的。 一、矩阵概述 1、定义 称为m*n矩阵 2、矩阵乘法 矩阵乘法其实并不难,它的意思就是将第一个矩阵A的第一行,与第二个矩阵B的第一列的数字分别相乘,得到的结果相加,最终的值做为结果矩阵的第(1,1)位置的值(即第一行,第一列)。  同样,A矩阵的第一行与B矩阵的第二列的数字分别相乘然后

Android ColorMatrix类图像颜色处理-黑白老照片、泛黄旧照片、高对比度等效果

在Android中,对图像进行颜色方面的处理,如黑白老照片、泛黄旧照片、高对比度、低饱和度等效果,都可以通过使用颜色矩阵(ColorMatrix)来实现。 1.颜色矩阵(ColorMatrix)介绍   颜色矩阵M是一个5*4的矩阵,如图1所示。在Android中,颜色矩阵M是以一维数组m=[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t]的方式进行存储的。