首页

关于j3d源码包中ColorUtils颜色工具类实现RGB、HSV、YUV及YIQ间的相互转换处理源码说明

标签:j3d,ColorUtils,颜色工具类,转RGB,转HSV,转YUV,转YIQ     发布时间:2018-07-09   

一、前言

关于j3d源码包中org.j3d.util.ColorUtils颜色工具类,实现了convertRGBtoHSV、convertRGBtoHSV、convertHSVtoRGB、convertHSVtoRGB、convertRGBtoYUV、convertYUVtoRGB、convertRGBtoYIQ、convertYIQtoRGB颜色间转换处理,详情参见源码说明部分。

二、源码说明

package org.j3d.util;@b@@b@public class ColorUtils@b@{@b@  private static final String INVALID_H_MSG = "Invalid h (it has a value) value when s is zero";@b@@b@  public static void convertRGBtoHSV(float[] paramArrayOfFloat1, float[] paramArrayOfFloat2)@b@  {@b@    convertRGBtoHSV(paramArrayOfFloat1[0], paramArrayOfFloat1[1], paramArrayOfFloat1[2], paramArrayOfFloat2);@b@  }@b@@b@  public static void convertRGBtoHSV(float paramFloat1, float paramFloat2, float paramFloat3, float[] paramArrayOfFloat)@b@  {@b@    float f1 = 0.0F;@b@    float f2 = 0.0F;@b@    float f3 = 0.0F;@b@@b@    float f4 = (paramFloat1 > paramFloat2) ? paramFloat1 : paramFloat2;@b@    f4 = (f4 > paramFloat3) ? f4 : paramFloat3;@b@@b@    float f5 = (paramFloat1 < paramFloat2) ? paramFloat1 : paramFloat2;@b@    f5 = (f5 < paramFloat3) ? f5 : paramFloat3;@b@@b@    f3 = f4;@b@@b@    if (f4 == 0.0F)@b@    {@b@      f2 = 0.0F;@b@      f1 = (0.0F / 0.0F);@b@    }@b@    else@b@    {@b@      float f6 = f4 - f5;@b@      f2 = f6 / f4;@b@@b@      if (paramFloat1 == f4)@b@      {@b@        f1 = (paramFloat2 - paramFloat3) / f6;@b@      }@b@      else if (paramFloat2 == f4)@b@      {@b@        f1 = 2.0F + (paramFloat3 - paramFloat1) / f6;@b@      }@b@      else if (paramFloat3 == f4)@b@      {@b@        f1 = 4.0F + (paramFloat1 - paramFloat2) / f6;@b@      }@b@@b@      f1 *= 60.0F;@b@      if (f1 < 0.0F)@b@        f1 += 360.0F;@b@@b@    }@b@@b@    paramArrayOfFloat[0] = f1;@b@    paramArrayOfFloat[1] = f2;@b@    paramArrayOfFloat[2] = f3;@b@  }@b@@b@  public static void convertHSVtoRGB(float[] paramArrayOfFloat1, float[] paramArrayOfFloat2)@b@  {@b@    convertHSVtoRGB(paramArrayOfFloat1[0], paramArrayOfFloat1[1], paramArrayOfFloat1[2], paramArrayOfFloat2);@b@  }@b@@b@  public static void convertHSVtoRGB(float paramFloat1, float paramFloat2, float paramFloat3, float[] paramArrayOfFloat)@b@  {@b@    float f1 = 0.0F;@b@    float f2 = 0.0F;@b@    float f3 = 0.0F;@b@@b@    if (paramFloat2 == 0.0F)@b@    {@b@      if (Float.isNaN(paramFloat1))@b@      {@b@        f1 = paramFloat3;@b@        f2 = paramFloat3;@b@        f3 = paramFloat3; break label225:@b@      }@b@@b@      throw new IllegalArgumentException("Invalid h (it has a value) value when s is zero");@b@    }@b@@b@    if (paramFloat1 == 360.0F)@b@    {@b@      paramFloat1 = 0.0F;@b@    }@b@@b@    paramFloat1 /= 60.0F;@b@    int i = (int)Math.floor(paramFloat1);@b@    float f4 = paramFloat1 - i;@b@    float f5 = paramFloat3 * (1.0F - paramFloat2);@b@    float f6 = paramFloat3 * (1.0F - paramFloat2 * f4);@b@    float f7 = paramFloat3 * (1.0F - paramFloat2 * (1.0F - f4));@b@@b@    switch (i)@b@    {@b@    case 0:@b@      f1 = paramFloat3;@b@      f2 = f7;@b@      f3 = f5;@b@      break;@b@    case 1:@b@      f1 = f6;@b@      f2 = paramFloat3;@b@      f3 = f5;@b@      break;@b@    case 2:@b@      f1 = f5;@b@      f2 = paramFloat3;@b@      f3 = f7;@b@      break;@b@    case 3:@b@      f1 = f5;@b@      f2 = f6;@b@      f3 = paramFloat3;@b@      break;@b@    case 4:@b@      f1 = f7;@b@      f2 = f5;@b@      f3 = paramFloat3;@b@      break;@b@    case 5:@b@      f1 = paramFloat3;@b@      f2 = f5;@b@      f3 = f6;@b@    }@b@@b@    label225: paramArrayOfFloat[0] = f1;@b@    paramArrayOfFloat[1] = f2;@b@    paramArrayOfFloat[2] = f3;@b@  }@b@@b@  public static void convertRGBtoYUV(float[] paramArrayOfFloat1, float[] paramArrayOfFloat2)@b@  {@b@    float f1 = paramArrayOfFloat1[0];@b@    float f2 = paramArrayOfFloat1[1];@b@    float f3 = paramArrayOfFloat1[2];@b@@b@    paramArrayOfFloat2[0] = (0.299F * f1 + 0.587F * f2 + 0.114F * f3);@b@    paramArrayOfFloat2[1] = (-0.169F * f1 - 0.331F * f2 + 0.5F * f3);@b@    paramArrayOfFloat2[2] = (0.5F * f1 - 0.419F * f2 - 0.081F * f3);@b@  }@b@@b@  public static void convertYUVtoRGB(float[] paramArrayOfFloat1, float[] paramArrayOfFloat2)@b@  {@b@    float f1 = paramArrayOfFloat1[0];@b@    float f2 = paramArrayOfFloat1[1];@b@    float f3 = paramArrayOfFloat1[2];@b@@b@    paramArrayOfFloat2[0] = (f1 + 1.14F * f3);@b@    paramArrayOfFloat2[1] = (f1 - 0.394F * f2 - 0.581F * f3);@b@    paramArrayOfFloat2[2] = (f1 + 2.028F * f2);@b@  }@b@@b@  public static void convertRGBtoYIQ(float[] paramArrayOfFloat1, float[] paramArrayOfFloat2)@b@  {@b@    float f1 = paramArrayOfFloat1[0];@b@    float f2 = paramArrayOfFloat1[1];@b@    float f3 = paramArrayOfFloat1[2];@b@@b@    paramArrayOfFloat2[0] = (0.299F * f1 + 0.587F * f2 + 0.114F * f3);@b@    paramArrayOfFloat2[1] = (0.596F * f1 - 0.274F * f2 - 0.322F * f3);@b@    paramArrayOfFloat2[2] = (0.212F * f1 - 0.523F * f2 - 0.311F * f3);@b@  }@b@@b@  public static void convertYIQtoRGB(float[] paramArrayOfFloat1, float[] paramArrayOfFloat2)@b@  {@b@    float f1 = paramArrayOfFloat1[0];@b@    float f2 = paramArrayOfFloat1[1];@b@    float f3 = paramArrayOfFloat1[2];@b@@b@    paramArrayOfFloat2[0] = (f1 + 0.956F * f2 + 0.621F * f3);@b@    paramArrayOfFloat2[1] = (f1 - 0.272F * f2 - 0.647F * f3);@b@    paramArrayOfFloat2[2] = (f1 - 1.105F * f2 + 1.702F * f3);@b@  }@b@}