使用Graphic画圆角矩形和填充圆角矩形的方法

转载 2011年01月21日 14:17:00

使用Graphic画圆角矩形和填充圆角矩形的方法

2008-01-05 21:57

/*
*   Copyright (c) 2004-2007 D8HOME.CN
*   All rights reserved.
*
* http://www.d8home.cn/
*
* This library is only free for any non commercial usage. In the case of
* modifying and/or redistributing the code, it's obligate to retain
* the original copyright notice.
*
*/
using System;
using System.Windows.Forms;
using System.Drawing;

namespace D8Drawing
{
/// <summary>
/// RoundRect 的摘要说明。
/// </summary>
public class RoundRect
{
   /// <summary>
   /// 最大圆角半径
   /// </summary>
   protected const int MaxRoundRadius = 3;
   /// <summary>
   /// 最小矩形边长,用于自动处理圆角大小
   /// </summary>
   protected const int MinBorderLength = 20;
   /// <summary>
   /// 绘制一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="nLeft">矩形左上角X坐标</param>
   /// <param name="nTop">矩形左上角Y坐标</param>
   /// <param name="nRight">矩形右下角X坐标</param>
   /// <param name="nBottom">矩形右下角Y坐标</param>
   /// <param name="round">圆角的半径长度</param>
   public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,int nLeft,int nTop,int nRight,int nBottom,int round)
   {
    if(round > MaxRoundRadius)
    {
     round = MaxRoundRadius;
    }
    else if( round < 0)
    {
     round = 0;
    }
    if(Math.Abs(nRight - nLeft) < MinBorderLength && Math.Abs(nBottom - nTop) < MinBorderLength)
    {
     round = 1;
    }

    Point Polygon1 = new Point (nLeft+round,nTop);
    Point Polygon2 = new Point (nRight-round+1,nTop);

    Point Polygon3 = new Point (nLeft,nTop+round);
    Point Polygon4 = new Point (nRight+1,nTop+round);

    Point Polygon5 = new Point (nLeft,nBottom-round);
    Point Polygon6 = new Point (nRight+1,nBottom-round);

    Point Polygon7 = new Point (nLeft+round,nBottom+1);
    Point Polygon8 = new Point (nRight-round,nBottom+1);

    //四条主线(上下左右)
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon1.X,Polygon1.Y,Polygon2.X,Polygon2.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon7.X,Polygon7.Y,Polygon8.X,Polygon8.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon3.X,Polygon3.Y,Polygon5.X,Polygon5.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon4.X,Polygon4.Y,Polygon6.X,Polygon6.Y);

    //四个边角
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon1.X,Polygon1.Y,Polygon3.X,Polygon3.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon2.X,Polygon2.Y,Polygon4.X,Polygon4.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon5.X,Polygon5.Y,Polygon7.X,Polygon7.Y);
    currentGraphicObject.DrawLine(new System.Drawing.Pen(lineColor),Polygon6.X,Polygon6.Y,Polygon8.X,Polygon8.Y);
   }
   /// <summary>
   /// 绘制一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="rect">要绘制的矩形对象</param>
   /// <param name="round">圆角的半径长度</param>
   public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,Rectangle rect,int round)
   {
    DrawRoundRect(currentGraphicObject,lineColor,rect.Left,rect.Top,rect.Right,rect.Bottom,round);
   }
   /// <summary>
   /// 绘制一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="rect">要绘制的矩形对象</param>
   public static void DrawRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,Rectangle rect)
   {
    DrawRoundRect(currentGraphicObject,lineColor,rect.Left,rect.Top,rect.Right,rect.Bottom,2);
   }

   /// <summary>
   /// 填充一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="nLeft">矩形左上角X坐标</param>
   /// <param name="nTop">矩形左上角Y坐标</param>
   /// <param name="nRight">矩形右下角X坐标</param>
   /// <param name="nBottom">矩形右下角Y坐标</param>
   /// <param name="round">圆角的半径长度</param>
   public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject,Color fillColor,int nLeft,int nTop,int nRight,int nBottom,int round)
   {
    if(round > MaxRoundRadius)
    {
     round = MaxRoundRadius;
    }
    else if( round < 0)
    {
     round = 0;
    }
    if(Math.Abs(nRight - nLeft) < MinBorderLength && Math.Abs(nBottom - nTop) < MinBorderLength)
    {
     round = 1;
    }

    Point Polygon1 = new Point (nLeft+round,nTop);
    Point Polygon2 = new Point (nRight-round+1,nTop);

    Point Polygon3 = new Point (nLeft,nTop+round);
    Point Polygon4 = new Point (nRight+1,nTop+round);

    Point Polygon5 = new Point (nLeft,nBottom-round);
    Point Polygon6 = new Point (nRight+1,nBottom-round);

    Point Polygon7 = new Point (nLeft+round,nBottom+1);
    Point Polygon8 = new Point (nRight-round,nBottom+1);
  
    currentGraphicObject.FillPolygon(new System.Drawing.SolidBrush(fillColor),new Point[]{   Polygon1,
                      Polygon3,
                      Polygon5,
                      Polygon7,
                      Polygon8,
                      Polygon6,
                      Polygon4,
                      Polygon2});
   }
   /// <summary>
   /// 填充一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="rect">要填充的矩形</param>
   /// <param name="indentSize">填充区域针对矩形的缩进距离</param>
   /// <param name="round">圆角的半径长度</param>
   public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,Rectangle rect,int indentSize,int round)
   {
    FillRoundRect(currentGraphicObject,lineColor,rect.Left+indentSize,rect.Top+indentSize,rect.Right-indentSize+1,rect.Bottom-indentSize+1,round);
   }
   /// <summary>
   /// 填充一个圆角矩形.
   /// </summary>
   /// <param name="currentGraphicObject">当前屏幕的图形对象</param>
   /// <param name="lineColor">矩形线条的颜色</param>
   /// <param name="rect">要填充的矩形</param>
   public static void FillRoundRect(System.Drawing.Graphics currentGraphicObject,Color lineColor,Rectangle rect)
   {
    FillRoundRect(currentGraphicObject,lineColor,rect,0,2);
   }    
}
}

Canvas---Canvas版画图、圆角矩形、圆形、矩形、图形填充、mvc模式重新整合代码版

 使用Canvas实现画图程序。(转载注明出处与作者啊) 本次主要更新了一下功能: 新添加图形:矩形,圆形,圆角矩形 实现了描边颜色与填充颜色的选择 使用类似mvc的模式重新整理了代码。...
  • MIKUScallion
  • MIKUScallion
  • 2015年01月27日 15:08
  • 4186

在Canvas中绘制圆角矩形

本文剖析了 Canvas API 中 arc 及 arcTo 函数的特征,并分别使用它们实现了 Canvas API 中所未提供的绘制圆角矩形的功能。...
  • tanghw
  • tanghw
  • 2015年11月12日 04:04
  • 5329

Canvas使用 -- 在canvas上绘制圆角矩形并添加文字

canvas的一点小应用
  • qq_26565729
  • qq_26565729
  • 2017年02月07日 01:58
  • 1272

【iOS沉思录】UIImage圆角矩形的‘离屏渲染’和‘当前屏幕渲染’实现方法

iOS中为view添加圆角效果有两种方式,一种基于“离屏渲染”(off-screen-renderring),直接设置view的layer层参数即可简单实现,也很常用,但性能较低;另一种则是编写底层图...
  • cordova
  • cordova
  • 2017年04月19日 15:22
  • 2085

drawRoundRect方法:绘制圆角矩形

Android语法范例参考大全》第8章Android绘图,本章详细介绍了Paint类和Canvas类中的方法,包括点、线、矩形、圆、椭圆、字符串和图像等各种对象的绘制。通过这些方法,开发者可以美化自己...
  • heiding215
  • heiding215
  • 2013年01月11日 18:26
  • 4979

drawRoundRect方法:绘制圆角矩形

转自:http://book.51cto.com/art/201204/328272.htm
  • ltx06
  • ltx06
  • 2014年08月25日 23:23
  • 1673

绘制圆角矩形(方法 )

/* sharecodes.org 友情提醒:尊重知识,转载请注明原创作者、出处! */ /// /// C# GDI+ 绘制圆角矩形 /// /// Gr...
  • qb164070
  • qb164070
  • 2012年10月16日 09:50
  • 295

【iOS沉思录】UIImage圆角矩形的‘离屏渲染’和‘在屏渲染’实现方法

iOS中为view添加圆角效果有两种方式,一种基于“离屏渲染”(off-screen-renderring),直接设置view的layer层参数即可简单实现,也很常用,但性能较低;另一种则是编写底层图...
  • donlagu
  • donlagu
  • 2017年04月19日 22:28
  • 84

深入分析纯css画圆角矩形原理

深入分析纯css画圆角矩形原理 原理分析: 在这里,利用的是像素点绘制圆角的方法,先看一个用像素绘制的圆角: 扩大了就是这样: 我们把它分作若干个部分来写样式,...
  • comeonJ
  • comeonJ
  • 2011年10月23日 18:43
  • 702

Android画圆角矩形图片,并在图片上写字

先画圆角矩形,这时圆角矩形是dst,然后画图形,图形是src,使用Mode是srcIn,这样就形成了圆角矩形; 接下来,圆角矩形是dst,然后画文字,文字是src,使用Mode是srcATop,这样...
  • Y09lin
  • Y09lin
  • 2013年11月29日 10:10
  • 3133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Graphic画圆角矩形和填充圆角矩形的方法
举报原因:
原因补充:

(最多只允许输入30个字)