/* Filter a pixel based on some parameters and return a color value */ public override HColor FilterPixel(HColor source) { HSVA pixel = HueSaturationValue.ColorToHSV(source); pixel.h = (pixel.h + mHSVA.h) % 360; pixel.s = Mathf.Clamp01(pixel.s + mHSVA.s); pixel.v = Mathf.Clamp01(pixel.v * mHSVA.v); pixel.a = Mathf.Clamp01(pixel.a * mHSVA.a); return(HueSaturationValue.HSVToHColor(pixel)); }
/* Filter a pixel based on some parameters and return a color value */ public override HColor FilterPixel(HColor source) { HSVA pixel = HueSaturationValue.ColorToHSV(source); /* Set the source pixel Hue */ pixel.h = mHSVA.h; pixel.s = pixel.s * mHSVA.s; pixel.v = pixel.v * mHSVA.v; /* Apply alpha as a multiplier */ pixel.a *= mHSVA.a; return(HueSaturationValue.HSVToHColor(pixel)); }
public static HSVA ColorToHSV(float r, float g, float b, float a) { HSVA hsv = new HSVA(0, 0, 0, 0); hsv.a = a; float maxc = Mathf.Max(r, Mathf.Max(g, b)); float minc = Mathf.Min(r, Mathf.Min(g, b)); // Set Hue if (maxc == minc) { hsv.h = 0; } else if (r == maxc) { hsv.h = 60f * ((g - b) / (maxc - minc)) % 360f; } else if (g == maxc) { hsv.h = 60f * ((b - r) / (maxc - minc)) + 120f; } else if (b == maxc) { hsv.h = 60f * ((r - g) / (maxc - minc)) + 240f; } if (hsv.h < 0) { hsv.h = 360 + hsv.h; } // Set Value hsv.v = maxc; // Set Saturation if (maxc == 0) { hsv.s = 0; } else { hsv.s = 1f - (minc / maxc); } return(hsv); }
public static Color HSVToColor(HSVA hsv) { float h = hsv.h; float s = hsv.s; float v = hsv.v; int hi = Mathf.FloorToInt(h / 60f) % 6; float f = (h / 60f) - Mathf.Floor(h / 60f); float p = v * (1f - s); float q = v * (1f - (f * s)); float t = v * (1f - ((1f - f) * s)); switch (hi) { case 0: return(new Color(v, t, p, hsv.a)); case 1: return(new Color(q, v, p, hsv.a)); case 2: return(new Color(p, v, t, hsv.a)); case 3: return(new Color(p, q, v, hsv.a)); case 4: return(new Color(t, p, v, hsv.a)); case 5: return(new Color(v, p, q, hsv.a)); default: Console.LogError("HSVToColor: error calculating Color " + hi); return(new Color(v, t, p, hsv.a)); } }
/* Filter a pixel based on some parameters and return a color value */ public override HColor FilterPixel(HColor source) { HSVA pixel = HueSaturationValue.ColorToHSV(source); /* Set the source pixel Hue */ pixel.h = mHSVA.h; /* * Assume the source pixel has saturation 1 and subtract inverse of saturation from it * This subtractive process will not saturate white pixels like highlites */ pixel.s = Mathf.Clamp01(pixel.s - (1 - mHSVA.s)); /* * Use the value as an exponent to darken pixels * This method does not darken white pixels ( to maintain highlights ) */ pixel.v = Mathf.Clamp01(Mathf.Pow(pixel.v, 1 + (1 - (mHSVA.v)) * 2.5f)); /* Apply alpha as a multiplier */ pixel.a *= mHSVA.a; return(HueSaturationValue.HSVToHColor(pixel)); }
public HSVShiftFilter() : base() { mHSVA = new HSVA(0, 0, 1, 1); }
public WhitePreservingColorFilter() : base() { mHSVA = new HSVA(0, 1f, 1f, 1f); }
public SimpleColorFilter() : base() { mHSVA = new HSVA(0f, 1f, 1f, 1f); }