zoukankan      html  css  js  c++  java
  • 实现RGB,CMY(K),YUV,YIQ,YCbCr颜色的转换算法

    源:http://blog.sina.com.cn/s/blog_4d80055a01000atu.html

    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;
     }
    }
  • 相关阅读:
    ASP.NET MVC5+ 路由特性
    老李分享:大数据,数据库,数据仓库之间是什么关系
    老李分享:DBA
    老李提问:开源家族你认识几个
    米尔格伦连锁信实验
    老李分享:六度分隔理论
    三者关系
    老李分享:JDK,JRE,JVM区别与联系
    Linux简介与厂商版本下
    Linux简介与厂商版本上
  • 原文地址:https://www.cnblogs.com/LittleTiger/p/3944404.html
Copyright © 2011-2022 走看看