Android Matrix矩阵详解

本文详细介绍了Android中的ColorMatrix和Matrix。ColorMatrix用于改变Bitmap的颜色和透明度,涉及黑白图片处理、色彩偏移缩放、饱和度调整和色彩旋转;Matrix则用于Bitmap的平移、缩放和错切操作。文中通过矩阵运算解析了两者的工作原理,并提供了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明本文出自maplejaw的博客(http://blog.csdn.net/maplejaw_

Android中有两个比较重要的矩阵,ColorMatrix和Matrix。ColorMatrix用来改变bitmap的颜色和透明度,Matrix用来对bitmap平移、缩放、错切。

ColorMatrix(色彩矩阵)

Android中Bitmap色彩用了一个[R, G, B, A],4*1的矩阵来保存。
image_1al1ljmtjdjfb2f12fb1aku1t6o13.png-3kB
如果想改变一个Bitmap的色彩该怎么办?现在来了解下ColorMatrix的相关知识。ColorMatrix 是一个4*5的矩阵。
image_1al1lctohqcr4rflnr103ij7mm.png-7.6kB
我们用[R’, G’, B’, A’]来保存新的bitmap色彩,4*5必须和5*1矩阵相乘才能得到4*1矩阵,于是运算关系如下:
image_1alm721n317ds1j9uigg1nvmd1k9.png-15.5kB
根据矩阵乘法通过如下运算,便能如下求出一个新的色彩矩阵了。

为什么要使用4*5矩阵而不是4*4矩阵?。因为只有4*5矩阵可以单独改变一种颜色值。比如你改变e,只会影响R’。

ColorMatrix的默认矩阵如下图所示
image_1al1nirqafabpm1f24fpd1cnk2n.png-4.2kB
可以看出,进行色彩变换运算后色彩值仍然不变。
image_1alm7iacech41osilg81v021nug13.png-25.2kB
知道ColorMatrix的运算原理后,我们就可以做很多事情了。

黑白图片

黑白图片的去色原理:只要把RGB三通道的色彩信息设置成一样;即:R=G=B,那么图像就变成了灰色,并且,为了保证图像亮度不变,同一个通道中的R+G+B应该接近1。
在matlab中按照 0.2989 R,0.5870 G 和 0.1140 B 的比例构成像素灰度值。
在OpenCV中按照 0.299 R, 0.587 G 和 0.114 B 的比例构成像素灰度值。
在Android中按照0.213 R,0.715 G 和 0.072 B 的比例构成像素灰度值。
这些比例主要是根据人眼中三种不同的感光细胞的感光强度比例分配的,因此并没有一个确切值,不同工具调试出来的效果也不尽相同。

知道了RGB相关配色后,相关核心代码如下。

    private Bitmap handleColorMatrix(){
        Canvas canvas = new Canvas(mTempBmp); // 创建一个画布
        Paint paint = new Paint(); // 新建paint
        paint.setAntiAlias(true); //抗锯齿
        //黑白
       ColorMatrix colorMatrix = new ColorMatrix(new float[]{  
        0.213f, 0.715f, 0.072f, 0, 0,  
        0.213f, 0.715f, 0.072f, 0, 0, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值