public static Color?ConvertColor(Color?color, ColorConversionMode mode) { if (!color.HasValue) { return(null); } return(ConvertColor(color.Value, mode)); }
public static void ConvertColor(ref Color color, ColorConversionMode mode) { if (mode == ColorConversionMode.None) { return; } if (color.A == 0) { return; } byte r = color.R, g = color.G, b = color.B; if (color.A < 255) { double amult = InverseAlphaTable[color.A], ad = color.A / 255.0, rd = (r * amult), gd = (g * amult), bd = (b * amult); if (mode == ColorConversionMode.LinearToSRGB) { rd = LinearTosRGB(rd); gd = LinearTosRGB(gd); bd = LinearTosRGB(bd); } else { rd = sRGBToLinear(rd); gd = sRGBToLinear(gd); bd = sRGBToLinear(bd); } color = new Color( (float)(rd * ad), (float)(gd * ad), (float)(bd * ad), (float)ad ); } else { var table = (mode == ColorConversionMode.LinearToSRGB) ? LinearByteTosRGBByteTable : sRGBByteToLinearByteTable; color = new Color( table[color.R], table[color.G], table[color.B], table[color.A] ); } }
public static Color ConvertColor(Color color, ColorConversionMode mode) { ConvertColor(ref color, mode); return(color); }