WinForm画网格并填充颜色

因为研究CodeCombat上的最后一题,自己尝试分解题目,然后想到需要画网格,还有最优化的方法

源代码如下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DrawGrid
{
    public partial class Form1 : Form
    {
        int multiple = 20;
        int width = 20;
        int height = 16;
        int w = 4;
        int h = 4;
        Pen bluePen = new Pen(Color.Black);

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            Console.WriteLine("Form长:{0},宽:{1}", this.Width, this.Height);
            this.Multiple();
            DrawGrid(width, height, w, h, e);

            List<Rectangle> l = new List<Rectangle>();
            Rectangle r;
            r = new Rectangle(0, w, 2 * w, h); l.Add(r);
            r = new Rectangle(3 * w, 0, 2 * w, h); l.Add(r);
            r = new Rectangle(2 * w, 3 * w, 2 * w, h); l.Add(r);
            foreach (Rectangle r1 in l)
            {
                e.Graphics.FillRectangle(new SolidBrush(Color.Black), r1);
            }
        }

        /// <summary>
        /// 将比例放大
        /// </summary>
        private void Multiple()
        {
            width = width * multiple;
            height = height * multiple;
            w = w * multiple;
            h = h * multiple;
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            Console.WriteLine("X={0},Y={1}", e.X, e.Y);
        }

        /// <summary>
        /// 画网格
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="w"></param>
        /// <param name="h"></param>
        private void DrawGrid(int width, int height, int w, int h, PaintEventArgs e)
        {
            Point p1 = new Point();
            Point p2 = new Point();

            p1.X = 0; p2.X = width;
            for (int y = 0; y <= height; y = y + h)
            {
                p1.Y = y; p2.Y = y;
                DrawLine(p1, p2, e);
            }
            p1.Y = 0; p2.Y = height;
            for (int x = 0; x <= width; x = x + w)
            {
                p1.X = x; p2.X = x;
                DrawLine(p1, p2, e);
            }
        }

        /// <summary>
        /// 画直线
        /// </summary>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        private void DrawLine(Point p1, Point p2, PaintEventArgs e)
        {
            e.Graphics.DrawLine(bluePen, p1, p2);
        }
    }
}

自己的测试图片如上图,是一个5*4的网格;

有三个地方已经被填充了。

剩下空白的地方,需可以用矩形填充。

考虑使用最少的矩形填充,应该就是4个矩形了。一目了然。

不过,如果考虑用程序实现的话,就复杂了。以后再尝试

时间: 2024-12-08 04:04:43

WinForm画网格并填充颜色的相关文章

画网格

画网格: 方法一:plt法 import numpy as np import matplotlib.pyplot as plt #解决能显示中文 plt.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 x=np.linspace(-10,10,10) y=x**2 plt.plot(x,y,linestyle=':',color

agg::rasterizer_scanline_aa画填充颜色三角形

在上两节的时候,曾经提到agg::rasterizer_scanline_aa也支持画线,但是很遗憾,我们调用该类的move_to,line_to函数完全没有任何的效果,画线,是画不成的了,但是这里面其实是我们根本就没有设置线段的宽度,线段的端点形状,没有办法调用agg::conv_stroke啊!!并且还有一个问题,使用move_to替换掉move_to_d,之后,根本就无法渲染出来,并且尝试渲染一个矩形,惨败啊!! 代码如下: //Scanline Rasterizer光栅化,说她是画册,描

WORD底纹填充颜色为灰色-5%怎么设置?

操作步骤如下: 先选中要设定底纹的段落文字--点开菜单栏上的"格式"--找到"边框和底纹"选项.点开--点击"底纹"选项--"填充"选项下,第一排为"无填充颜色",然后在第二排的左起第二格就是"灰色-5%"--点击选中即可. 假如是设定"段落"底纹,那么还要在右边"应用于"选项下--选择"段落":假如是设定"文字&qu

Excel的单元格设置下拉选项并填充颜色

如何在Excel的单元格中加入下拉选项 方法/步骤   第一步:打开excel文档,选中需加入下拉选项的单元格.  第二步:点击菜单中的"数据"->"数据有效性"->"数据有效性".   第三步:在弹出的页面中设置菜单下,点击"允许"下选择"序列"按钮.   第四步:在来源中输入单元格中需设置的下拉选项,用英文的逗号","隔开,然后点击确定按钮. 即可得到我们要的效果. 怎么

VBA对指定单元格填充颜色并且赋值

使用VBA对指定的单元格赋值并填充颜色 ====================================================== 代码区域 ====================================================== Sub row应用() For Each rw In Rows("1:13") If rw.Row Mod 2 = 0 Then rw.Interior.ColorIndex = 3 rw.Value = 99 End

HTML5填充颜色的fillStyle测试

效果:http://hovertree.com/texiao/html5/canvas/1/ 代码: 1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html;charset=gbk" /> 4 <script type="text/javascript"> 5 function draw(){ 6 var ctx

怎样将Excel包含某字符的单元格填充颜色

在处理数据的时候,xmyanke想将Excel中包含某字符的单元格填充蓝色,比较容易看清,弄了好一阵子都没完成,最后试用条件格式处理了一下,终于实现了. 比如要将A1到A12区间包含数字1的单元格填充成蓝色,点击A1按shift键再点击A12选中A1:A12区间所有单元格,在菜单栏中选“格式”-“条件格式” 在弹出的条件格式对话框中选“单元格数值”“等于”“1”,点击“格式”按钮,弹出的单元格格式对话框中的“图案”选项,选择蓝色单元格底色,确定 这样设置以后,Excel包含某字符的单元格填充颜色

css3 画网格

<!DOCTYPE><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>css画网格</title><link rel="stylesheet" href="http://wow.techbrood.com/css/normalize.css

9.9递归和动态规划(七)——实现许多图片编辑软件都支持的“填充颜色”功能

/** * 功能:实现许多图片编辑软件都支持的"填充颜色"功能. * 给定一个屏幕(以二维数组表示,元素为颜色值).一个点和一个新的颜色值,将新颜色填入这个店的周围区域,知道原来的颜色值全都改变. */ /** * 思路:假设要对一个像素(比如红色)调用paintFill,即对周围的像素逐一调用paintFill, * 向外扩张,一旦碰到非红色的像素就停止填充. * * 注意:碰到图像问题,要注意screen[y][x]中x和y的顺序.x表示水平轴(即自左向右),实际上对应于列数,而非