public Color[] GetColors(ColoringMode coloringMode, MapColorPalette colorPalette, Color startColor, Color middleColor, Color endColor, int colorCount) { if (colorCount == 0) { return(null); } if (coloringMode == ColoringMode.DistinctColors) { ColorGenerator colorGenerator = new ColorGenerator(); return(colorGenerator.GenerateColors(colorPalette, colorCount)); } switch (colorCount) { case 1: return(new Color[1] { startColor }); case 2: return(new Color[2] { startColor, endColor }); default: { bool flag = middleColor.A == 0; byte a = startColor.A; byte a3 = middleColor.A; byte a2 = endColor.A; startColor = Color.FromArgb(255, startColor); middleColor = Color.FromArgb(255, middleColor); endColor = Color.FromArgb(255, endColor); Color[] array = new Color[colorCount]; array[0] = startColor; array[colorCount - 1] = endColor; Rectangle rect = new Rectangle(0, 0, colorCount, 1); if (colorCount % 2 == 1) { rect.Width--; } Bitmap bitmap = new Bitmap(colorCount, 1); using (LinearGradientBrush linearGradientBrush = new LinearGradientBrush(rect, startColor, endColor, 0f, false)) { ColorBlend colorBlend = new ColorBlend(); if (flag) { colorBlend.Positions = new float[2] { 0f, 1f }; colorBlend.Colors = new Color[2] { startColor, endColor }; } else { colorBlend.Positions = new float[3] { 0f, 0.5f, 1f }; colorBlend.Colors = new Color[3] { startColor, middleColor, endColor }; } linearGradientBrush.InterpolationColors = colorBlend; using (Graphics graphics = Graphics.FromImage(bitmap)) { graphics.FillRectangle(linearGradientBrush, rect); } } float num = (float)((a2 - a) / (colorCount - 1)); float num2 = (float)(int)a; for (int i = 1; i < colorCount - 1; i++) { num2 += num; Color pixel = bitmap.GetPixel(i, 0); array[i] = Color.FromArgb((int)num2, pixel); } return(array); } } }