三种常见的颜色格式及其转换:RGB、YUV、CMYK

QuibblerQuibbler 2022-05-08 约 7 分钟 3145 次阅读

三种常见的颜色格式及其转换:RGB、YUV、CMYK

彩色记录的格式有很多种,常见的有RGB、YUV、CMYK这三种。RGB是运用最广的颜色系统之一;YUV的发明用于彩色电视与黑白电视的过渡;CMYK即印刷色彩模式,顾名思义就是用来印刷的。

Android开发中用到的主要是RGB,详见Color详解一文。

1、常见的三种颜色格式

1.1、RGB格式

RGB模式是一种发光的色彩模式,诉求于人眼对色彩的感应。RGB图像具有三个通道:R、G、B,分别对应红、绿、蓝三个分量,三原色之间的组合是1670万种的颜色。

通常,还会给RGB图像加一个通道Alpha,即透明度,于是共有四个分量共同控制颜色(ARGB)。

1.2、YUV格式

YUV是一种模拟型号。 Y表示明亮度,U/V表示的则是色度,量化前取值范围:Y∈ [0,1]   U,V∈[-0.5,0.5]。其它YUV格式有:YCbCr,YPbPr、YUY2、YUYV、YVYU、UYVY、AYUV等。

1.3、CMYK格式

CMYK是一种依靠反光的色彩模式,也称作印刷色彩模式。是一种专门针对印刷设定的颜色标准,通过对青(C)、洋红(M)、黄(Y)、黑(K)四个颜色变化以及它们相互之间的叠加来得各种颜色。

2、颜色空间转换

不同颜色格式可以相互转换,只是不同的色彩空间的转换公式是不一样的,且较为复杂。Android中也有和颜色转换相关的方法,比如ColorMatrix类中就有颜色转换的方法。

2.1、RGB to YUV

参考ColorMatrix类中的setRGB2YUV()方法。

/**
     * Y = 0.299 R + 0.587 G + 0.114 B
     * U = -0.1687 R - 0.3313 G + 0.5 B + 128
     * V = 0.5 R - 0.4187 G - 0.0813 B + 128
     */
    public static float[] rgb2YUV(float R, float G, float B) {
        float Y = 0.299f * R + 0.587f * G + 0.114f * B;
        float U = -0.1687f * R - 0.3313f * G + 0.5f * B + 128;
        float V = 0.5f * R - 0.4187f * G - 0.0813f * B + 128;
        return new float[]{Y, U, V};
    }

2.2、YUV to RGB

参考ColorMatrix类中的setYUV2RGB()方法。

/**
     * R = Y + 1.402 (V-128)
     * G = Y - 0.34414 (U-128) - 0.71414 (V-128)
     * B = Y + 1.772 (U-128)
     */
    public static float[] yuv2RGB(int Y, int U, int V) {
        float R = Y + 1.402f * (V - 128);
        float G = Y - 0.34414f * (U - 128) - 0.71414f * (V - 128);
        float B = Y + 1.772f * (U - 128);
        return new float[]{R, G, B};
    }

2.3、RGB to CMYK

RGB转换成CMYK的方法:

/**
     * R‘ =R/255
     * G‘ =G/255
     * B‘ = B/255
     *
     * K= 1-max(R‘,G‘,B‘)
     * C= (1-R‘-K) / (1-K)
     * M= (1-G‘-K) / (1-K)
     * Y= (1-B‘-K) / (1-K)
     */
    public static float[] rgb2CMYK(float R, float G, float B) {
        float R_ = R / 255;
        float G_ = G / 255;
        float B_ = B / 255;
        float K = 1 - Math.max(R_, Math.max(G_, B_));
        float C = (1 - R_ - K) / (1 - K);
        float M = (1 - G_ - K) / (1 - K);
        float Y = (1 - B_ - K) / (1 - K);
        return new float[]{C, M, Y, K};
    }

2.4、CMYK to RGB

CMYK转换成RGB的方法:

/**
     * R= 255 × (1-C) × (1-K)
     * G= 255 × (1-M) × (1-K)
     * B= 255 × (1-Y) × (1-K)
     */
    public static float[] cmyk2RGB(float C, float M, float Y, float K) {
        float R = 255 * (1 - C) * (1 - K);
        float G = 255 * (1 - M) * (1 - K);
        float B = 255 * (1 - Y) * (1 - K);
        return new float[]{R, G, B};
    }


参考资料:

        RGB

YUV

        CMYK

相关推荐

Honeycam 最好的GIF动图软件
精选分享

Honeycam 最好的GIF动图软件

Honeycam 最好的GIF动图软件推荐一款Gif制作软件:Honeycam,是一款高质量的GIF动图制作和编辑器。以前将视频转GIF,录制屏幕动图要费很大功夫,这款软件真的非常简洁好用,值得收藏,博客上的GIF都是用Honeycam录制的。官网:Honeycam1、简洁的界面下载安装完成后打开,主界面很简洁。2、录制屏幕选择录制,调整好要录制的区域录制完成后,可以编辑每个帧,调整帧时长,删除多

2.6k
国内开源镜像站点
精选分享

国内开源镜像站点

国内开源镜像站点开源,(Open Source)全称为开放源代码。开源就是要用户利用源代码在其基础上修改和学习的,但开源系统同样也有版权,同样也受到法律保护。国内的高校和一些企业也建立了开源镜像站点,支持开源。从开源站点上面可以下载很多开源资源(Android源码),上大学的时候就在这些镜像网站上下载Linux发行版、Qt等软件。 清华大学:http://mirrors.tuna.tsinghua

2.6k
牛人快跑:Boss 直聘自动化求职工具
置顶 精选分享

牛人快跑:Boss 直聘自动化求职工具

找工作最难熬的不是面试,而是投递期的无意义消耗:同一句打招呼发两百遍,眼睛还要替平台把关——筛掉皮包公司、跳过半年不登录的招聘方、避开挂羊头卖狗肉的僵尸职位。牛人快跑 GeekGeekRunhttps://github.…

160