码迷,mamicode.com
首页 > 移动开发 > 详细

Android ColorMatrix 亮度矩阵 对比度矩阵 黑白矩阵

时间:2015-03-30 21:16:40      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:android   矩阵   颜色   

颜色矩阵M是5*4的矩阵,android中颜色矩阵M是以一维数组m=[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t]的方式进行存储的。

矩阵的每行分别是:
R[a b c d e]
G[f g h i j]
B[k l m n o]
A[p q r s t]
图像的RGBA值则存储在一个5*1的颜色分量矩阵C中,要想改变一张图片的颜色效果,只需要改变图像的颜色分量矩阵即可。

在对ColorMatrixFilter过滤时候,传入的这个参数ColorMatrix,首先应该postConcat亮度矩阵:

        float lum = (brightness - 50) * 2 * 255 * 0.01f;
        matrix.set(new float[]
                {1, 0, 0, 0, lum,
                 0, 1, 0, 0, lum,
                 0, 0, 1, 0, lum,
                 0, 0, 0, 1, 0});

再postConcat对比度矩阵:

        //scale为1时为普通模式,[0 , 1]为减少对比度,[1 , 1 + factor]为增加对比度
        float scale = 1;
        if (contrast < 50)
        {
            scale = contrast / 50f;
        }
        else if (contrast > 50)
        {
            scale = (contrast - 50) / 50f * 2.5f + 1;
        }

        float lum = 256 * brightness / 100 * (1f - scale);
        cm.set(new float[]
                {
                 scale, 0, 0, 0, lum,   
                 0, scale, 0, 0, lum    ,
                 0, 0, scale, 0, lum    ,
                 0, 0, 0, 1, 0
                });

最后再乘一些效果矩阵,比如黑白矩阵:

        float a = 0.3086f * 256;
        float b = 0.6094f * 256;
        float c = 0.0820f * 256;
        float lum = -256 * threshold;
        ColorMatrix matrix = new ColorMatrix();
        matrix.set(new float[]
                {a, b, c, 0, lum,
                 a, b, c, 0, lum,
                 a, b, c, 0, lum,
                 0, 0, 0, 1, 0});

图片效果:冲蚀 和 填充方式:水印是不同的效果。
水印是指将一个图印在一个图上。水印效果里面可以添加冲蚀,这种通常被用来做背景图片。如果水印未选择冲蚀,那么水印上去的应该是原图。
冲蚀效果是通过调整图片的 对比度和 亮度来实现的。

Android ColorMatrix 亮度矩阵 对比度矩阵 黑白矩阵

标签:android   矩阵   颜色   

原文地址:http://blog.csdn.net/hnulwt/article/details/44755025

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!