浅谈android中图片处理之色彩特效处理ColorMatrix(三)

本文探讨了Android中图片色彩处理的原理,尤其是使用ColorMatrix进行色彩特效处理。通过理解位图和矢量图的区别,以及位图中的ARGB颜色值,介绍了ColorMatrix如何通过矩阵运算改变像素点的色彩。文章提供了修改颜色系数和偏移量的方法,并提到了Android官方提供的色调、饱和度和亮度调整API。此外,还讨论了直接修改每个像素点ARGB值的精确方法,以及如何实现底片和老照片等效果。
摘要由CSDN通过智能技术生成

在android开发中对图片处理很是频繁,其中对图片的颜色处理就是很常见的一种。我们经常看到一些类似美图秀秀,美颜相机的app,为什么那么黑的人拍出来是确实那么地白呢?长的那么那个(丑)的人,用美颜相机拍出来的看起来也有那么回事(拍出来就感觉挺漂亮)。就像网上有个段子,有钱的都去韩国了,没钱都用ps了。韩国的就去整形,中国的就用ps.这些话虽然是调侃,但是从某种程度上来说像类似美图秀秀,美颜相机app确实挺受大家欢迎。但是你是否曾想过它这种效果,它是怎么实现的吗?你是否曾想过它的原理是什么吗?所以我将和大家一同由浅入深结合一些实例从原理上讲解一下如何实现图片的美颜以及各种图片风格实现。

  要想实现对图片的颜色的处理,首先就必须要了解图片的组成原理。图片主要有两种数据结构形式的图片,一种是位图,另一种是矢量图,但是在大部分的时候我们接触到的都是位图。

——的两种分类:

——位图

例子:单色位图

256位图

24位位图

位图图像(bitmap,亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。常用的位图处理软件是Photoshop

位图的常见格式:pngjpgbmp

——矢量图

矢量图,也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。

矢量图是根据几何特性来绘制图形,矢量可以是一个点或一条线,矢量图只能靠软件生成,文件占用内在空间较小,因为这种类型的图像文件包含独立的分离图像,可以自由无限制的重新组合。它的特点是放大后图像不会失真,和分辨率无关,适用于图形设计、文字设计和一些标志设计、版式设计等。

矢量图的常见格式:svgps

  大家都知道我们经常使用的图片的数据结构是位图---->Bitmap.它包含一张图片的所有的数据信息。整个图片是由点阵和颜色值(ARGB)组成的。因为位图是由像素点组成的,点阵指的是像素点的组成矩阵,而颜色值指的是;ARGB值,(A代表透明度,R代表红色值,G代表绿色值,B则代表蓝色)正好是自然界的三原色和透明度。大家都知道任何一种的颜色都可以使用三原色按照不同比例混合搭配而得到。所以这样就造成了每张图片都是色彩鲜艳,美观好看。一张色彩鲜艳的图片组成是这样的,我们知道图片是位图(这里不考虑矢量图),都是很多个像素点矩阵组成,实际上每个像素点的ARGB都是不一样的,也可以这么说每个像素点的颜色都不一样,然后不同颜色的像素点组成在一起就形成了一张色彩鲜艳图片。

 前面我们多次提到了颜色矩阵,那么我们就推出这次主角ColorMatrix颜色矩阵。

颜色矩阵的分析如下:

  在Android中我们使用ColorMatrix矩阵来处理图片的色彩的效果,Android的为颜色矩阵是一个4X5的数字矩阵,它用来对图片色彩的处理。而对于每个像素点

都会有一个颜色的分量矩阵用来保存的ARGB值。注意:在android中使用的是一维数组来保存这个M矩阵(颜色矩阵)[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t]而C就是颜色分量矩阵

相信学了线性代数的都知道是通过矩阵乘法来对颜色分量矩阵


由以上的公式可以得出每个像素点的颜色分量矩阵,通过矩阵乘法得到:

R1=a*R+b*G+c*B+d*A+e;

G1=f*R+g*G+h*B+i*A+j;

B1=k*R+l*G+m*B+n*A+o;

A1=p*R+q*G+r*B+s*A+t;

通过以上公式的分析可得到,R1,G1,B1,A1分量值取决于他们的系数和最后加部分的偏移量(e,j,o,t).可得出如下结论:

1、第一行的a,b,c,d,e用来决定新的颜色值中的R的值(红色)---a,b,c,d为系数,e则为偏移量(offset),若a=1;b,c,d都为0,e为任意值(0-N),这就可以的得到:R1=R+e(若e=0,则R1=R),那就得出了,影响单个红色变化的有两个因素:一个是系数a,另一个则是偏移量(offset)e.所以当我们想控制单个红色的值话就可以从控制这两个变量值即可。a的系数取值范围为( -1 到 2之间),e为偏移量,当我的a系数定了后,其他的b,c,d参数为0,当修改e的值后就会改变红色这个单个颜色的深浅程度,可以这样理解前面几个系数(a,b,c,d)用来配色的,而e后面偏移量则是用来控制颜色整体的深浅程度的

2、第二行f,g,h,i,j用来决定新的颜色值中的G的值(绿色)---f,g,h,i,j为系数,j则为偏移量(offset),若f=1;g,h,i都为0,j为任意值(0-N),这就可以的得到:G1=G+j(若j=0,则G1=G),那就得出了,影响单个绿色变化的有两个因素:一个是系数f,另一个则是偏移量(offset)j.所以当我们想控制单个绿色的值话就可以从控制这两个变量值即可。f的系数取值范围为( 0到 2之间),j为偏移量,当我的f系数定了后,其他的g,h,i参数为0,当修改j的值后就会改变绿色这个单个颜色

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊喵先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值