# 实现RGB,CMY(K),YUV,YIQ,YCbCr颜色的转换算法

/**
*颜色选择器颜色转换算法类
* 山东大学计算机系
* @author 邵建
* @version 1.0
**/

import java.lang.Math;
import java.awt.*;

public class ColorConverter{

public ColorConverter(){
}

//RGB转换CMYk
public int[] rgb2cmyk(int R,int G,int B){
int cmyk []= new int[4];
cmyk[3]=(int)(Math.min(Math.min(255-R,255-G),255-B)/2.55);//cmykK
int MyR = (int)(R/2.55);
int Div = 100-cmyk[3];
if (Div == 0)Div = 1;
cmyk[0] = ((100-MyR-cmyk[3])/Div)*100;//cmykC
int MyG = (int)(G/2.55);
cmyk[1] = ((100-MyG-cmyk[3])/Div)*100;
int MyB = (int)(B/2.55);
cmyk[2] = ((100-MyB-cmyk[3])/Div)*100;

return cmyk;
}
public Color cmyk2rgb(int C,int M,int Y,int K){
float MyC = C/100;
float MyM = M/100;
float MyY = Y/100;
float MyK = K/100;

int R = (int)((1-(MyC*(1-MyK)+MyK))*255);
int G = (int)((1-(MyM*(1-MyK)+MyK))*255);
int B = (int)((1-(MyY*(1-MyK)+MyK))*255);

if (R<0) R=0;
if (G<0) G=0;
if (B<0) B=0;
if (R>255) R=255;
if (G>255) G=255;
if (B>255) B=255;

Color rgb = new Color(R,G,B);
return rgb;
}

public int[] rgb2yuv(int R,int G,int B){

int yuv[] = new int[3];
yuv[0] =(int)(0.299*R+0.587*G+0.114*B);
yuv[1] = (int)(-0.147*R-0.289*G+0.437*B);
yuv[2] = (int)(0.615*R-0.515*G-0.1*B);
return yuv;
}
public Color yuv2rgb(int y,int u,int v){

int R = (int)(y+1.14*v);
int G = (int)(y-0.394*u-0.581*v);
int B = (int)(y+2.028*u);
if (R<0) R=0;
if (G<0) G=0;
if (B<0) B=0;
if (R>255) R=255;
if (G>255) G=255;
if (B>255) B=255;

Color rgb=new Color(R,G,B);
return rgb;
}
public int[] rgb2yiq(int R,int G,int B){

int yiq[] = new int[3];
yiq[0] = (int)(0.299*R+0.587*G+0.114*B);
yiq[1] = (int)(0.596*R-0.274*G-0.322*B);
yiq[2] = (int)(0.212*R-0.523*G+0.311*B);
return yiq;
}
public Color yiq2rgb(float y,float i,float q){

int R = (int)(y+0.956*i+0.621*q);
int G = (int)(y-0.272*i-0.647*q);
int B = (int)(y-1.105*i+1.702*q);

if (R<0) R=0;
if (G<0) G=0;
if (B<0) B=0;
if (R>255) R=255;
if (G>255) G=255;
if (B>255) B=255;

Color rgb = new Color(R,G,B);
return rgb;
}

//RGB转换YCbCr
public int[] rgb2ycbcr(int R, int G,int B){

int ycbcr[] = new int[3];
ycbcr[0] = (int)(0.299*R+0.587*G+0.114*B);
ycbcr[1] = (int)(-0.1687*R-0.3313*G+0.5*B+128);
if (ycbcr[1] > 255) ycbcr[1] = 255;
ycbcr[2] = (int)(0.5*R-0.4187*G-0.0813*B+128);
if (ycbcr[2] > 255) ycbcr[2] = 255;

return ycbcr;
}
public Color ycbcr2rgb(int Y,int Cb,int Cr){
int MyR = (int)(Y + 1.402 * (Cr -128));
int MyG = (int)(Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr - 128));
int MyB = (int)(Y + 1.772 * (Cb -128));

if (MyR > 255) MyR = 255;
if (MyG > 255) MyG = 255;
if (MyB > 255) MyB = 255;

if (MyR < 0) MyR =0;
if (MyG < 0) MyG =0;
if (MyB < 0) MyB =0;

Color rgb = new Color(MyR,MyG,MyB);
return rgb;
}
}

• 本文已收录于以下专栏：

## 颜色空间（RGB、YUV、YIQ、CMY）

﻿﻿ 人类获取信息的70~80%来源于视觉。    　多媒体计算机的图像处理和视频效应的过程：首先必须把连续的图像函数f(x,y) 进行空间和幅值上的离散化处理。然后再将离散化的数字信息还原为...
• yjhxdzyx
• 2015年02月04日 16:29
• 2820

## RGB,CMY(K),YUV,YIQ,YCbCr颜色的转换算法（java实现）

import java.lang.Math; import java.awt.*; public class ColorConverter{ public ColorConverter(...
• leansmall
• 2015年06月08日 19:30
• 1386

## 彩色图像--色彩空间 YIQ 、YUV 、YCbCr 、YC1C2 和I1I2I3

YIQ 、YUV 、YCbCr 、YC1C2 和I1I2I3
• TonyShengTan
• 2015年03月13日 15:29
• 3505

## YIQ、YUV、YCrCb 与 RGB关系

1 前言         自然界的颜色千变万化，为了给颜色一个量化的衡量标准，就需要建立色彩空间模型来描述各种各样的颜色，由于人对色彩的感知是一个复杂的生理和心理联合作用的过程，所以在不同的应用...
• tkp2014
• 2015年03月06日 14:28
• 1788

## RGB、YUV和YCbCr三种颜色空间

[转载] http://blog.sina.com.cn/s/blog_a85e142101010h8n.html [转载] http://blog.sina.com.cn/s/blog_571...
• u010186001
• 2016年10月12日 20:37
• 2093

## RGB/YUV/YCbCr--关于显示，颜色你需要了解的一些 事 入门扫盲好文章

• vc66vcc
• 2016年04月21日 11:43
• 1965

## YUV、YCbCr与RGB的区别

YUV、YCbCr与RGB的区别 一、概念介绍 1、YUV：中“Y”表示明亮度（Luminance或Luma），也就是灰阶值；而“U”和“V” 表示的则是色度（Chrominance或Chroma），...
• MrJonathan
• 2014年01月02日 11:01
• 7882

## YUV视频格式到RGB32格式转换的速度优化 上篇

YUV视频格式到RGB32格式转换的速度优化 上篇                    HouSisong@GMail.com   2007.10.30  tag: ...
• housisong
• 2007年10月31日 11:37
• 12367

## RGB与YCbCr颜色空间的互相转换公式

Y：明亮度（Luminance或Luma），也就是灰阶值。“亮度”是透过RGB输入信号来建立的，方法是将RGB信号的特定部分叠加到一起。 Cb：反映的是RGB输入信号蓝色部分与RGB信号亮度...
• a14730497
• 2014年01月05日 17:07
• 11584

## YUV 和 YCbCr 公式

• chao56789
• 2014年11月07日 10:39
• 861

举报原因： 您举报文章：实现RGB,CMY(K),YUV,YIQ,YCbCr颜色的转换算法 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)