AcTools.Utils.ImageUtils.GetBaseColors48 C# (CSharp) Метод

GetBaseColors48() публичный статический Метод

public static GetBaseColors48 ( Bitmap bitmap ) : Color[]
bitmap Bitmap
Результат Color[]
        public static Color[] GetBaseColors48(Bitmap bitmap) {
            var colors = new List<ColorEntry>(50);

            for (var y = Padding; y < Size - Padding; y++) {
                for (var x = Padding; x < Size - Padding; x++) {
                    var c = bitmap.GetPixel(x, y);
                    var h = c.GetHue();
                    var s = c.GetSaturation();
                    var b = c.GetBrightness();

                    var w = (1.2 - Math.Abs((double)x / Size - 0.5) - Math.Abs((double)y / Size - 0.5)).Saturate();
                    if (b < 0.1) continue;

                    w += s;

                    for (var i = 0; i < colors.Count; i++) {
                        var en = colors[i];
                        if (en.Distance(h, s, b) > Threshold) continue;

                        en.Add(h, s, b, w);
                        for (var j = i + 1; j < colors.Count; j++) {
                            var em = colors[j];
                            if (em.Distance(en.H, en.S, en.B) > Threshold) continue;

                            en.Add(em.H, em.S, em.B, em.Weight);
                            colors.Remove(em);
                            j--;
                        }

                        goto loop;
                    }

                    colors.Add(new ColorEntry(h, s, b, w));
                    loop:;
                }
            }

            if (colors.Count == 0) return new Color[0];

            var result = colors.OrderBy(x => -x.Weight).ToList();
            return result.Where(x => x.Weight > result.ElementAt(0).Weight * 0.1).Select(x => x.Tune()).ToArray();
        }