Android Imageview 图片置灰,图片特殊节日去真彩色

2023-04-12


ImageView


ImageView是Android中的一个图片显示控件,用来加载网络或者本地图片资源。好看的图片可以让应用更被用户接收,如果图片作为应用的装饰,已成为主流,但不是所有的图片显示都符合要求,比如一些特殊时间,特别靓丽的色彩不符合当下假日要求,这个时候如果能让图片变成灰色,这样用助于达到效果。


由于图片基本都是人工在处理,一张图可以直接换资源,如果是千人千面,几十万或者上百张资源根本来不及处理。这时,如果我们能通过色彩过滤,对一些色彩进行置灰,这样在显示上依旧可以达到效果。


ImageView提供了setColorFilter(ColorMatrixColorFilter)方法,通过该方法,对颜色进行过滤。

public ColorMatrixColorFilter(@NonNull ColorMatrix matrix)又是一个Bean类,真正处理色彩的是ColorMatrix

ColorMatrix :


4x5矩阵,用于变换位图的颜色和alpha分量。矩阵可以作为单个数组传递,并按如下方式处理


setSaturation(float sat)方法就是对颜色进行处理,针对的是R/G/B三原色进行混淆


sat:取值是0到1,值越大,色彩饱和越量,为1,是图片的原色,越小,越灰


Android中的color基本有三原色,RGB组成,


000000是黑色,


FFFFFF:白色


源码如下:

public void setSaturation(float sat) {
    reset();
    float[] m = mArray;

    final float invSat = 1 - sat;
    final float R = 0.213f * invSat;
    final float G = 0.715f * invSat;
    final float B = 0.072f * invSat;

    m[0] = R + sat; m[1] = G;       m[2] = B;
    m[5] = R;       m[6] = G + sat; m[7] = B;
    m[10] = R;      m[11] = G;      m[12] = B + sat;
}

测试代码:


ColorMatrix colorMatrix = new ColorMatrix();
           //0-1
          colorMatrix.setSaturation(progress * 1.0f / 100.0f);
          ColorMatrixColorFilter colorFilter = new     
           ColorMatrixColorFilter(colorMatrix);
           imageView.setColorFilter(colorFilter);



本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。

免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com