I have been trying to draw an annulus (ring with thickness) with a transparent hole and a gradient rim in C# with very little success. Does anyone have any suggestions on how to do this?
here’s a nice Blend Utility
Here’s the Final result – thanks to BlueMonkMN
Rectangle GetSquareRec(double radius, int x, int y) { double r = radius; double side = Math.Sqrt(Math.Pow(r, 2) / 2); Rectangle rec = new Rectangle(x - ((int)side), y - ((int)side), (int)(side * 2) + x, (int)(side * 2) + y); return rec; } void Form1_Paint(object sender, PaintEventArgs e) { Graphics gTarget = e.Graphics; gTarget.SmoothingMode = SmoothingMode.AntiAlias; GraphicsPath pTemp = new GraphicsPath(); Rectangle r = GetSquareRec(200, 225, 225); pTemp.AddEllipse(r); pTemp.AddEllipse(GetSquareRec(50, 225, 225)); Color[] colors = new Color[5]; colors[0] = Color.FromArgb(192, 192, 192); colors[1] = Color.FromArgb(105, 0, 0); colors[2] = Color.FromArgb(169, 169, 169); colors[3] = Color.FromArgb(0, 0, 0); colors[4] = Color.FromArgb(0, 0, 0); float[] positions = new float[5]; positions[0] = 0f; positions[1] = 0.1f; positions[2] = 0.35f; positions[3] = 0.5f; positions[4] = 1f; ColorBlend Cb = new ColorBlend(); Cb.Colors = colors; Cb.Positions = positions; PathGradientBrush pgb = new PathGradientBrush(pTemp); pgb.InterpolationColors = Cb; pgb.CenterPoint = new PointF(r.X + (r.Width / 2), r.Y + (r.Height / 2)); gTarget.FillPath(pgb, pTemp); }
This is how I did it in the Scrolling Game Development Kit:
(source: enigmadream.com)
I edited the original SGDK code for this sample because originally I wasn’t smart enough to scale the gradient to exclude the hole, but now I guess I am :).
If you would rather see the gradient like this:
(source: enigmadream.com)
Then change the blend code to look like this: