-
Notifications
You must be signed in to change notification settings - Fork 1
/
GummyImage.cs
97 lines (73 loc) · 4.43 KB
/
GummyImage.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace BaseTris
{
internal class GummyImage
{
public static Image GetGummyImage(Color usecolor, Color useInnerColor, Size RectDrawSize)
{
Bitmap DrawGummy = new Bitmap(RectDrawSize.Width, RectDrawSize.Height);
using (Graphics GummyCanvas = Graphics.FromImage(DrawGummy))
{
GummyCanvas.SmoothingMode = SmoothingMode.HighQuality;
GummyCanvas.InterpolationMode = InterpolationMode.Bicubic;
//first ellipse.
// Base ellipse
Rectangle BaseEllipse = new Rectangle(new Point(0, 0), new Size(RectDrawSize.Width, RectDrawSize.Height));
Rectangle ReflectionEllipse = new Rectangle(BaseEllipse.Location, new Size(BaseEllipse.Size.Width - 2, BaseEllipse.Size.Height - 2));
GraphicsPath ReflectionPath = new GraphicsPath(FillMode.Winding);
ReflectionPath.AddRectangle(ReflectionEllipse);
PathGradientBrush ReflectionGradient = new PathGradientBrush(ReflectionPath);
ReflectionGradient.CenterColor = usecolor;
ReflectionGradient.SurroundColors = new[] {Color.FromArgb(255, Color.Black)};
ReflectionGradient.CenterPoint = new PointF((float) (BaseEllipse.Width / 1.5), BaseEllipse.Top - Convert.ToInt16(BaseEllipse.Height * 2));
Blend ReflectionBlend = new Blend(5);
ReflectionBlend.Factors = new[] {0.5f, 1.0f, 1.0f, 1.0f, 1.0f};
ReflectionBlend.Positions = new[] {0.0f, 0.05f, 0.5f, 0.75f, 1.0f};
ReflectionGradient.Blend = ReflectionBlend;
GummyCanvas.FillPath(ReflectionGradient, ReflectionPath);
if (useInnerColor != usecolor)
{
int outlinewidth = Math.Min(BaseEllipse.Size.Width / 8, BaseEllipse.Size.Height / 8);
Rectangle inset = new Rectangle(BaseEllipse.Left + outlinewidth, BaseEllipse.Top + outlinewidth, BaseEllipse.Width - (outlinewidth * 2), BaseEllipse.Height - (outlinewidth * 2));
LinearGradientBrush lgb = new LinearGradientBrush(inset, useInnerColor, Color.LightGray, LinearGradientMode.Horizontal);
GummyCanvas.FillRectangle(lgb, inset);
}
ReflectionGradient.Dispose();
ReflectionPath.Dispose();
// 1st highlight ellipse
int HighlightWidth = Convert.ToInt16(ReflectionEllipse.Width * 1f);
int HighlightHeight = Convert.ToInt16(ReflectionEllipse.Height * 0.6);
int HighlightX = (ReflectionEllipse.Width / 2) - (HighlightWidth / 2);
int HighlightY = ReflectionEllipse.Top + 1;
Rectangle HighlightEllipse = new Rectangle
(
new Point(HighlightX, HighlightY),
new Size(HighlightWidth, HighlightHeight));
Color HighlightColour = Color.White;
Color HighlightFade = Color.Transparent;
LinearGradientBrush HighlightBrush = new LinearGradientBrush(HighlightEllipse, HighlightColour, HighlightFade, 90);
HighlightBrush.WrapMode = WrapMode.TileFlipX;
GummyCanvas.FillRectangle(HighlightBrush, HighlightEllipse);
HighlightBrush.Dispose();
// 2nd hilite ellipse
int Highlight2Width = Convert.ToInt16(ReflectionEllipse.Width * 0.3);
int Highlight2Height = Convert.ToInt16(ReflectionEllipse.Height * 0.2);
int Highlight2X = (ReflectionEllipse.Width / 2) - (Highlight2Width / 2);
int Highlight2Y = ReflectionEllipse.Top + Convert.ToInt16(ReflectionEllipse.Height * 0.2);
Rectangle Highlight2Ellipse = new Rectangle
(
new Point(-(Highlight2Width / 2), -(Highlight2Height / 2)),
new Size(Highlight2Width, Highlight2Height));
LinearGradientBrush br3 = new LinearGradientBrush(Highlight2Ellipse, HighlightColour, HighlightFade, 90, true);
GummyCanvas.TranslateTransform(Highlight2X, Highlight2Y);
GummyCanvas.RotateTransform(-30);
GummyCanvas.FillEllipse(br3, Highlight2Ellipse);
br3.Dispose();
}
return DrawGummy;
}
}
}