C#使用GDI绘图九宫格与方位

25 篇文章 1 订阅

上篇我们已经绘制了EightDiagram的八种图案

C#使用GDI绘制EightDiagram_斯内科的博客-CSDN博客

洛书九宫方位

古人则是下北上南,右西左东。从洛书九宫图可以看出数、卦、方位一一对应关系:

一代表坎卦,位居正北方;二代表坤卦,位居西南方;三代表震卦,位居东方;

四代表巽卦,位居东南方;五代表中宫;六代表乾卦,位居西北方;

七代表兑卦,位居西方;八代表艮卦,位居东北方;九代表离卦,位居南方。

这里我们绘制九宫格,以及相应的方位等图形,以及点击某一处显示具体内容与事件

VS2017中新建窗体应用程序EightDiagramDemo

将默认的Form1重命名为FormNineGrid,窗体FormNineGrid设计如图

 新建绘制图片与文字类DrawDiagramUtil.cs

DrawDiagramUtil类源代码如下:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EightDiagramDemo
{
    /// <summary>
    /// 绘制八卦图操作类
    /// </summary>
    public class DrawDiagramUtil
    {
        /// <summary>
        /// 绘制某一个八卦图片
        /// 八卦的每一个符号都由9个小矩形组成,
        /// 实线由三个连续的宽度为40,高度为20的小矩形组成。虚线由两个宽度为40,高度为20的小矩形 与 中间的宽度和高度都为0的小矩形组成
        /// </summary>
        /// <param name="panel">显示的面板控件:面板宽度为200,高度为200</param>
        /// <param name="diagramChar">八卦中文描述</param>
        /// <param name="diagramIndex">坤为0,震为1,坎为2,兑为3,艮为4,离为5,巽为6,乾为7</param>
        /// <param name="color">颜色,【乾坎艮】为绿色,【巽离】为黄色,【坤震兑】为红色</param>
        public static void GenerateEightDiagramSymbol(Panel panel, string diagramChar, int diagramIndex, Color color)
        {
            panel.BackgroundImage = null;//清除背景
            //面板宽度为200,高度为200
            Bitmap bitmap = new Bitmap(panel.Width, panel.Height);
            Graphics graphics = Graphics.FromImage(bitmap);
            //爻是按照从下往上的顺序:坤为0,震为1,坎为2,兑为3,艮为4,离为5,巽为6,乾为7.
            //阳爻:实线,由三个连续的宽度为40,高度为20的小矩形组成
            //阴爻:虚线,由两个宽度为40,高度为20的小矩形 与 中间的宽度和高度都为0的小矩形组成
            //因此 八卦的每一个符号都由9个小矩形组成
            int lineWidth1 = 0;
            int lineHeight1 = 0;
            int lineWidth2 = 0;
            int lineHeight2 = 0;
            int lineWidth3 = 0;
            int lineHeight3 = 0;
            if (diagramIndex == 1)
            {
                lineWidth1 = 40;
                lineHeight1 = 20;
            }
            else if (diagramIndex == 2)
            {
                lineWidth2 = 40;
                lineHeight2 = 20;
            }
            else if (diagramIndex == 3)
            {
                lineWidth1 = 40;
                lineHeight1 = 20;
                lineWidth2 = 40;
                lineHeight2 = 20;
            }
            else if (diagramIndex == 4)
            {
                lineWidth3 = 40;
                lineHeight3 = 20;
            }
            else if (diagramIndex == 5)
            {
                lineWidth1 = 40;
                lineHeight1 = 20;
                lineWidth3 = 40;
                lineHeight3 = 20;
            }
            else if (diagramIndex == 6)
            {
                lineWidth2 = 40;
                lineHeight2 = 20;
                lineWidth3 = 40;
                lineHeight3 = 20;
            }
            else if (diagramIndex == 7)
            {
                lineWidth1 = 40;
                lineHeight1 = 20;
                lineWidth2 = 40;
                lineHeight2 = 20;
                lineWidth3 = 40;
                lineHeight3 = 20;
            }

            Rectangle[] rects = new Rectangle[9]
            {
                new Rectangle(40, 40, 40, 20), new Rectangle(80, 40, lineWidth3, lineHeight3), new Rectangle(120, 40, 40, 20),
                new Rectangle(40, 80, 40, 20), new Rectangle(80, 80, lineWidth2, lineHeight2), new Rectangle(120, 80, 40, 20),
                new Rectangle(40, 120, 40, 20), new Rectangle(80, 120, lineWidth1, lineHeight1), new Rectangle(120, 120, 40, 20),
            };
            //奇门遁甲八门中:
            //开门,休门,生门是吉祥的;绿色标识
            //杜门和景门可以说是中性的,又是吉祥,有时应凶;黄色标识
            //死门,惊门,伤门是三个容易应凶、出凶的门;红色标识
            //开门在乾金宫,休门在坎水宫,生门在艮土宫,伤门在震木宫,
            //杜门在巽木宫,景门在离火宫,死门在坤土宫,惊门在兑金宫。
            graphics.FillRectangles(new SolidBrush(color), rects);
            graphics.DrawRectangles(new Pen(color), rects);
            SizeF sizeF = graphics.MeasureString(diagramChar, new Font("华文楷体", 25));
            graphics.DrawString(diagramChar, new Font("华文楷体", 25), new SolidBrush(Color.Black), 100 - sizeF.Width / 2, 170 - sizeF.Height / 2);
            graphics.Dispose();
            panel.BackgroundImage = bitmap;
        }

        /// <summary>
        /// 生成文字:中宫五
        /// </summary>
        /// <param name="panel"></param>
        /// <param name="diagramChar"></param>
        public static void GenerateFiveCenter(Panel panel, string diagramChar)
        {
            panel.BackgroundImage = null;//清除背景
            //面板宽度为200,高度为200
            Bitmap bitmap = new Bitmap(panel.Width, panel.Height);
            Graphics graphics = Graphics.FromImage(bitmap);
            SizeF sizeF = graphics.MeasureString(diagramChar, new Font("华文楷体", 40));
            graphics.DrawString(diagramChar, new Font("华文楷体", 40, FontStyle.Bold), new SolidBrush(Color.Black), 100 - sizeF.Width / 2, 100 - sizeF.Height / 2);
            graphics.Dispose();
            panel.BackgroundImage = bitmap;
        }
    }
}

窗体FormNineGrid源程序如下

在窗体FormNineGrid的Load加载事件中显示

(忽略设计器自动生成的代码):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EightDiagramDemo
{
    public partial class FormNineGrid : Form
    {
        public FormNineGrid()
        {
            InitializeComponent();
        }

        private void FormNineGrid_Load(object sender, EventArgs e)
        {
            DrawDiagramUtil.GenerateEightDiagramSymbol(panel8, "坎一", 2, Color.Green);
            DrawDiagramUtil.GenerateEightDiagramSymbol(panel3, "坤二", 0, Color.Red);
            DrawDiagramUtil.GenerateEightDiagramSymbol(panel4, "震三", 1, Color.Red);
            DrawDiagramUtil.GenerateEightDiagramSymbol(panel1, "巽四", 6, Color.Yellow);
            DrawDiagramUtil.GenerateFiveCenter(panel5, "中宫五");
            DrawDiagramUtil.GenerateEightDiagramSymbol(panel9, "乾六", 7, Color.Green);
            DrawDiagramUtil.GenerateEightDiagramSymbol(panel6, "兑七", 3, Color.Red);
            DrawDiagramUtil.GenerateEightDiagramSymbol(panel7, "艮八", 4, Color.Green);
            DrawDiagramUtil.GenerateEightDiagramSymbol(panel2, "离九", 5, Color.Yellow);
        }
    }
}

九宫方位运行如图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯内科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值