protected
void
Page_Load(
object
sender, EventArgs e)
{
Bitmap bm = new Bitmap( 800 , 600 );
Graphics g = Graphics.FromImage(bm);
g.FillRectangle(Brushes.White, new Rectangle( 0 , 0 , 800 , 600 ));
FillRoundRectangle(g,Brushes.Plum, new Rectangle( 100 , 100 , 100 , 100 ), 8 );
DrawRoundRectangle(g, Pens.Yellow, new Rectangle( 100 , 100 , 100 , 100 ), 8 );
bm.Save(Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
bm.Dispose();
}
public static void DrawRoundRectangle(Graphics g,Pen pen,Rectangle rect, int cornerRadius)
{
using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius))
{
g.DrawPath(pen, path);
}
}
public static void FillRoundRectangle(Graphics g, Brush brush,Rectangle rect, int cornerRadius)
{
using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius))
{
g.FillPath(brush, path);
}
}
internal static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
{
GraphicsPath roundedRect = new GraphicsPath();
roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2 , cornerRadius * 2 , 180 , 90 );
roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2 , rect.Y);
roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2 , rect.Y, cornerRadius * 2 , cornerRadius * 2 , 270 , 90 );
roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2 , rect.Right, rect.Y + rect.Height - cornerRadius * 2 );
roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2 , rect.Y + rect.Height - cornerRadius * 2 , cornerRadius * 2 , cornerRadius * 2 , 0 , 90 );
roundedRect.AddLine(rect.Right - cornerRadius * 2 , rect.Bottom, rect.X + cornerRadius * 2 , rect.Bottom);
roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2 , cornerRadius * 2 , cornerRadius * 2 , 90 , 90 );
roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2 , rect.X, rect.Y + cornerRadius * 2 );
roundedRect.CloseFigure();
return roundedRect;
}
{
Bitmap bm = new Bitmap( 800 , 600 );
Graphics g = Graphics.FromImage(bm);
g.FillRectangle(Brushes.White, new Rectangle( 0 , 0 , 800 , 600 ));
FillRoundRectangle(g,Brushes.Plum, new Rectangle( 100 , 100 , 100 , 100 ), 8 );
DrawRoundRectangle(g, Pens.Yellow, new Rectangle( 100 , 100 , 100 , 100 ), 8 );
bm.Save(Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
bm.Dispose();
}
public static void DrawRoundRectangle(Graphics g,Pen pen,Rectangle rect, int cornerRadius)
{
using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius))
{
g.DrawPath(pen, path);
}
}
public static void FillRoundRectangle(Graphics g, Brush brush,Rectangle rect, int cornerRadius)
{
using (GraphicsPath path = CreateRoundedRectanglePath(rect, cornerRadius))
{
g.FillPath(brush, path);
}
}
internal static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)
{
GraphicsPath roundedRect = new GraphicsPath();
roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2 , cornerRadius * 2 , 180 , 90 );
roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2 , rect.Y);
roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2 , rect.Y, cornerRadius * 2 , cornerRadius * 2 , 270 , 90 );
roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2 , rect.Right, rect.Y + rect.Height - cornerRadius * 2 );
roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2 , rect.Y + rect.Height - cornerRadius * 2 , cornerRadius * 2 , cornerRadius * 2 , 0 , 90 );
roundedRect.AddLine(rect.Right - cornerRadius * 2 , rect.Bottom, rect.X + cornerRadius * 2 , rect.Bottom);
roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2 , cornerRadius * 2 , cornerRadius * 2 , 90 , 90 );
roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2 , rect.X, rect.Y + cornerRadius * 2 );
roundedRect.CloseFigure();
return roundedRect;
}