public static long GetEuclideanDistance(ColorModelComponents distance /*ColorModel model, Color requestedColor, Color targetColor*/) { // var comps = GetColorComponentsDistance(model, requestedColor, targetColor); var result = distance.ComponentA * distance.ComponentA + distance.ComponentB * distance.ComponentB + distance.ComponentC * distance.ComponentC; if (distance.ComponentD.HasValue) { result += distance.ComponentD.Value * distance.ComponentD.Value; } return((long)result); }
public static ColorModelComponents GetColorComponentsDistance(ColorModel model, Color sourceColor, Color targetColor) { var sourceComponents = GetColorComponents(model, sourceColor); var targetComponents = GetColorComponents(model, targetColor); var distance = new ColorModelComponents( sourceComponents.ComponentA - targetComponents.ComponentA, sourceComponents.ComponentB - targetComponents.ComponentB, sourceComponents.ComponentC - targetComponents.ComponentC); if (sourceComponents.ComponentD.HasValue && targetComponents.ComponentD.HasValue) { distance.ComponentD = sourceComponents.ComponentD - targetComponents.ComponentD; } return(distance); }