コード例 #1
0
        public override double Distance(Color3d circleColor, Color3d pixelColor, int distX, int distY)
        {
            if (circleColor.GetType() != pixelColor.GetType())
            {
                throw new Exception("Can't compare colors in different color spaces");
            }

            var circleColorRgb = circleColor.ConvertTo <ColorRgb>();
            var pixelColorRgb  = pixelColor.ConvertTo <ColorRgb>();

            var mineCircleColor = new ColorMine.ColorSpaces.Rgb
            {
                R = circleColorRgb.R,
                G = circleColorRgb.G,
                B = circleColorRgb.B
            };

            var minePixelColor = new ColorMine.ColorSpaces.Rgb
            {
                R = pixelColorRgb.R,
                G = pixelColorRgb.G,
                B = pixelColorRgb.B
            };

            var ciede2000diff = mineCircleColor.Compare(minePixelColor, new ColorMine.ColorSpaces.Comparisons.CieDe2000Comparison());
            int distFromPoint = (int)Math.Sqrt(distX * distX + distY * distY);

            return(ciede2000diff + distFromPoint);
        }
コード例 #2
0
        public override double Distance(Color3d circleColor, Color3d pixelColor, int distX, int distY)
        {
            if (circleColor.GetType() != pixelColor.GetType())
            {
                throw new Exception("Can't compare colors in different color spaces");
            }

            double colorDist = 0;

            for (int i = 0; i < circleColor.Spectrums.Length; i++)
            {
                var dist = circleColor.Spectrums[i] - pixelColor.Spectrums[i];
                colorDist += dist * dist;
            }

            return(Math.Sqrt(colorDist));
        }