private Int64 GetColorBucketIndex(Color color) { Single normalizedDistance = 0.0f; Single componentA, componentB, componentC; switch (ColorModel) { case ColorModel.RedGreenBlue: normalizedDistance = NormalizedDistanceRGB; break; case ColorModel.HueSaturationLuminance: normalizedDistance = NormalizedDistanceHSL; break; case ColorModel.LabColorSpace: normalizedDistance = NormalizedDistanceLab; break; } ColorModelHelper.GetColorComponents(ColorModel, color, out componentA, out componentB, out componentC); Single distance = componentA * componentA + componentB * componentB + componentC * componentC; Single normalized = distance * normalizedDistance * MaximalDistance; Int64 resultHash = (Int64)normalized / bucketSize; return(resultHash); }