private void RenderPathCustomColors(PathRule pathRule, ColoringMode coloringMode, MapColorPalette palette, Color fromColor, Color middleColor, Color toColor) { pathRule.UseCustomColors = true; SetRuleColors(pathRule.GetColors(coloringMode, palette, fromColor, middleColor, toColor, GetBucketCount()), pathRule.CustomColors); }
public Color[] GenerateColors(MapColorPalette palette, int colorCount) { Color[] array = new Color[colorCount]; if (palette == MapColorPalette.Random) { Random random = new Random(465804847); for (int i = 0; i < colorCount; i++) { Color color = Color.FromArgb(random.Next(100, 256), random.Next(100, 256), random.Next(100, 256)); if (this.CheckDistance(color, array, i, 50 / colorCount)) { array[i] = color; } else { i--; } } } switch (palette) { case MapColorPalette.Light: { Random random5 = new Random(265804847); for (int m = 0; m < colorCount; m++) { Color color5 = Color.FromArgb(random5.Next(160, 256), random5.Next(160, 256), random5.Next(160, 256)); if (this.CheckDistance(color5, array, m, 15 / colorCount)) { array[m] = color5; } else { m--; } } break; } case MapColorPalette.SemiTransparent: { Random random3 = new Random(465889847); for (int k = 0; k < colorCount; k++) { Color color3 = Color.FromArgb(128, random3.Next(256), random3.Next(256), random3.Next(256)); if (this.CheckDistance(color3, array, k, 50 / colorCount)) { array[k] = color3; } else { k--; } } break; } case MapColorPalette.Dundas: { Random random4 = new Random(965889847); for (int l = 0; l < colorCount; l++) { if (l < ColorGenerator.colorsDundas.Length) { array[l] = ColorGenerator.colorsDundas[l]; } else { Color color4 = Color.FromArgb(random4.Next(256), random4.Next(64, 256), random4.Next(64, 256)); if (this.CheckDistance(color4, array, l, 50 / colorCount)) { array[l] = color4; } else { l--; } } } break; } case MapColorPalette.Pacific: { Random random2 = new Random(539136961); for (int j = 0; j < colorCount; j++) { if (j < ColorGenerator.colorsPacific.Length) { array[j] = ColorGenerator.colorsPacific[j]; } else { Color color2 = Color.FromArgb(random2.Next(256), random2.Next(64, 256), random2.Next(64, 256)); if (this.CheckDistance(color2, array, j, 50 / colorCount)) { array[j] = color2; } else { j--; } } } break; } } return(array); }
private void RenderShapeCustomColors(ShapeRule shapeRule, ColoringMode coloringMode, MapColorPalette palette, Color fromColor, Color middleColor, Color toColor) { shapeRule.UseCustomColors = true; SetRuleColors(shapeRule.GetColors(coloringMode, palette, fromColor, middleColor, toColor, GetBucketCount()), shapeRule.CustomColors); }
internal Color[] GetColors(ColoringMode coloringMode, MapColorPalette colorPalette, Color startColor, Color middleColor, Color endColor, int colorCount) { if (colorCount == 0) { return(null); } if (coloringMode == ColoringMode.DistinctColors) { return(new 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; _ = 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, isAngleScaleable: 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 = (a2 - a) / (colorCount - 1); float num2 = (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); } } }