コード例 #1
0
ファイル: ColorLUT.cs プロジェクト: sq/Libraries
 public static Color?ConvertColor(Color?color, ColorConversionMode mode)
 {
     if (!color.HasValue)
     {
         return(null);
     }
     return(ConvertColor(color.Value, mode));
 }
コード例 #2
0
ファイル: ColorLUT.cs プロジェクト: sq/Libraries
        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]
                    );
            }
        }
コード例 #3
0
ファイル: ColorLUT.cs プロジェクト: sq/Libraries
 public static Color ConvertColor(Color color, ColorConversionMode mode)
 {
     ConvertColor(ref color, mode);
     return(color);
 }