static public double Distance(LabColor x, LabColor y)
        {
            switch (_COLORSPACE)
            {
            case Colorspace.CIE2000:
                return(CIE2000.ComputeDifference(x, y));

            case Colorspace.CIE1994:
                return(CIE1994.ComputeDifference(x, y));

            case Colorspace.CIE1976:
                return(CIE1976.ComputeDifference(x, y));

            default:
                return(CIE1976.ComputeDifference(x, y));
            }
        }
Beispiel #2
0
        private bool Compare(Bitmap bitmap, int x, int y, Color color)
        {
            var difference = new CIE76ColorDifference();
            var converter  = new ColourfulConverter()
            {
                WhitePoint = Illuminants.D65
            };
            var rgbColor = bitmap.GetPixel(bitmap.Width - x, bitmap.Height - y);
            var labColor = converter.ToLab(new RGBColor(rgbColor));
            var cmpColor = converter.ToLab(new RGBColor(color));
            var diff     = difference.ComputeDifference(labColor, cmpColor);

            return(Math.Abs(diff) < ColorDiffThreashold);
        }
Beispiel #3
0
        private PowDebuff[] GetPowDebuffs(Bitmap bitmap)
        {
            // 右下のアイコンは透過が少しあるため、ピクセル単位の色が完全一致しない。
            // そのため、L*a*b色空間での色差が閾値以内かどうかで判定する。
            var converter = new ColourfulConverter()
            {
                WhitePoint = Illuminants.D65
            };
            var powerBreakCmpLabColor1 = converter.ToLab(PowerBreakCmpColor1);
            var powerBreakCmpLabColor2 = converter.ToLab(PowerBreakCmpColor2);
            var difference             = new CIE76ColorDifference();

            for (int i = 0; i < MaxPowerDebuffCount; i++)
            {
                var x1 = bitmap.Width - 28 - (32 * i);
                var x2 = bitmap.Width - 34 - (32 * i);
                var y  = bitmap.Height - 20;

                var c1 = converter.ToLab(new RGBColor(bitmap.GetPixel(x1, y)));
                var c2 = converter.ToLab(new RGBColor(bitmap.GetPixel(x2, y)));

                var diff1 = difference.ComputeDifference(powerBreakCmpLabColor1, c1);
                var diff2 = difference.ComputeDifference(powerBreakCmpLabColor2, c2);

                if (Math.Abs(diff1) < ColorDiffThreashold &&
                    Math.Abs(diff2) < ColorDiffThreashold)
                {
                    return(new PowDebuff[]
                    {
                        PowerBreak
                    });
                }
            }

            return(new PowDebuff[0]);
        }
        private bool IsSameColorContains(uint[] colors, uint c)
        {
            var difference = new CIE76ColorDifference();
            var converter  = new ColourfulConverter()
            {
                WhitePoint = Illuminants.D65
            };
            var labColor = converter.ToLab(new RGBColor(Color.FromArgb((int)c)));

            foreach (var color in colors)
            {
                var l    = converter.ToLab(new RGBColor(Color.FromArgb((int)color)));
                var diff = difference.ComputeDifference(labColor, l);
                if (Math.Abs(diff) < ColorDiffThreashold)
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #5
0
 public double Distance(Color c1, Color c2)
 {
     return(Ciede76.ComputeDifference(Converter.ToLab(new RGBColor(c1)), Converter.ToLab(new RGBColor(c2))));
 }