一、前言
关于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@}