zy78_C#窗体绘图

news2024/9/30 8:26:24

文章目录

  • 1.绘画的命名空间
  • 2.像素和坐标系
  • 3.颜色
  • 4.Graphics类的部分方法
  • 5.画刷(Brush)
  • 6.路径(Path)
  • 7.OnPaint方法
  • 8.绘图程序
    • 8.1源代码:
    • 8.2代码解释
      • 1. 构造函数和组件初始化
      • 2. 绘制直线
      • 3. 清除窗体
      • 4. 绘制椭圆
      • 5. 更改填充样式
      • 6. 绘制五角星

1.绘画的命名空间

绘图空间

2.像素和坐标系

像素:构成图像的最小单位

坐标系:

————————————————> x轴

|

|

|

|

|

\/ y轴

3.颜色

在这里插入图片描述
在这里插入图片描述

4.Graphics类的部分方法

Graphics类的部分方法

5.画刷(Brush)

画刷

6.路径(Path)

路径

GraphicsPath类的常用属性和方法:

GraphicsPath类

7.OnPaint方法

程序刚开始运行时在窗体上绘图

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        /*Graphics g = CreateGraphics();
        SolidBrush brush=new SolidBrush(Color.Green);
        g.FillEllipse(brush, 50, 30, 200, 100);
        g.Dispose();
        brush.Dispose();*/
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        Graphics g=e.Graphics;
        Pen pen=new Pen(Color.Red, 2);
        g.DrawEllipse(pen, 20, 30, 230, 80);
    }
}

8.绘图程序

8.1源代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Graphics g = this.CreateGraphics();//绘图在窗体上
        Pen pen = new Pen(Color.Red, 5);
        Point startPoint = new Point(50, 80);
        Point endPoint = new Point(250, 30);
        g.DrawLine(pen, startPoint, endPoint);
        //释放资源
        g.Dispose();
        pen.Dispose();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Graphics g = CreateGraphics();
        g.Clear(BackColor);
        g.Dispose();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
    //画椭圆

    private void button3_Click(object sender, EventArgs e)
    {
        Graphics g = CreateGraphics();
        g.FillEllipse(brush, 80, 30, 230, 100);//(80,30),(230,100)
        g.Dispose();
    }
    private Brush brush = new SolidBrush(Color.Red);
    private void radioButton1_CheckedChanged(object sender, EventArgs e)
    {
        brush = new SolidBrush(Color.Green);
    }

    private void radioButton2_CheckedChanged(object sender, EventArgs e)
    {
        brush = new TextureBrush(imageList1.Images[0]);
    }

    private void radioButton3_CheckedChanged(object sender, EventArgs e)
    {
        //渐变:从一种颜色到另一种颜色的变化
        Point startPoint = new Point(80, 70);
        Point endPoint = new Point(310, 70);
        brush = new LinearGradientBrush(startPoint, endPoint, Color.Red, Color.Green);
    }

    private void radioButton4_CheckedChanged(object sender, EventArgs e)
    {
        brush = new HatchBrush(HatchStyle.ForwardDiagonal, Color.Red, Color.RosyBrown);
    }
    //画五角星
    private void button4_Click(object sender, EventArgs e)
    {
        Point[] pt = new Point[10];
        pt[0] = new Point(120, 46);
        pt[1] = new Point(156, 46);
        pt[2] = new Point(168, 10);
        pt[3] = new Point(180, 46);
        pt[4] = new Point(214, 46);
        pt[5] = new Point(188, 70);
        pt[6] = new Point(198, 106);
        pt[7] = new Point(168, 82);
        pt[8] = new Point(138, 104);
        pt[9] = new Point(150, 70);
        GraphicsPath path = new GraphicsPath();
        for (int i=0;i<8;i++)
        {
            path.AddLine(pt[i], pt[i+1]);
        }
        path.CloseFigure();
        Graphics g = CreateGraphics();
        g.FillPath(brush, path);
        g.Dispose();
        path.Dispose();
    }
}

8.2代码解释

1. 构造函数和组件初始化

public Form1()
{
    InitializeComponent();
}

这是Form1的构造函数,它调用InitializeComponent()方法来初始化窗体上的所有控件。

2. 绘制直线

private void button1_Click(object sender, EventArgs e)
{
    // ... 绘图代码 ...
}

当用户点击button1时,会在窗体上绘制一条红色的直线。这里使用了CreateGraphics()方法来获取Graphics对象,然后定义了直线的起点和终点,并使用Pen对象绘制直线。最后,释放了GraphicsPen对象占用的资源。

3. 清除窗体

private void button2_Click(object sender, EventArgs e)
{
    Graphics g = CreateGraphics();
    g.Clear(BackColor);
    g.Dispose();
}

点击button2时,会清除窗体上的所有绘图,使其背景色恢复为窗体的背景色。这里同样使用了CreateGraphics()方法,并通过Clear方法清除绘图。

4. 绘制椭圆

private void button3_Click(object sender, EventArgs e)
{
    // ... 绘图代码 ...
}

点击button3时,会在窗体上绘制一个红色的椭圆。这里定义了一个Brush对象用于填充椭圆,并使用FillEllipse方法绘制。

5. 更改填充样式

通过radioButton1radioButton4CheckedChanged事件,用户可以更改用于绘图的填充样式。这些事件处理器分别设置了不同的Brush对象,包括纯色、纹理、线性渐变和斜线图案。

6. 绘制五角星

private void button4_Click(object sender, EventArgs e)
{
    // ... 定义点数组 ...
    GraphicsPath path = new GraphicsPath();
    // ... 添加线条到路径 ...
    Graphics g = CreateGraphics();
    g.FillPath(brush, path);
    // 释放资源
}

点击button4时,会在窗体上绘制一个五角星。这里首先定义了一个点数组来表示五角星的顶点,然后使用GraphicsPath对象将这些点连接成形状,并通过FillPath方法使用当前brush填充该形状。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2179164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++复习】多态{深入理解多态底层}

文章目录 介绍windows下堆栈相对位置析构函数复习override和final和重载/重定义/重写抽象类多态原理回顾虚基表指针单继承多态底层打印虚函数表多继承多态底层c输出类成员函数地址再次理解多态早期绑定/晚期绑定 介绍 什么是多态 多态&#xff08;Polymorphism&#xff09;是面…

MySQL之分库分表后带来的“副作用”你是怎么解决的?

目录标题 一、垂直分表后带来的隐患二、水平分表后带来的问题1.多表联查问题2.增删改数据问题3.聚合操作问题 三、垂直分库后产生的问题1.跨库join问题2.分布式事务问题3.部分业务库依然存在的性能问题 四、水平分库后需要解决的问题1.聚合操作和连表问题2.数据分页问题3.ID主键…

TypeScript是基于LLM上层研发的受益者

TypeScript优在哪里 TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的一个超集&#xff0c;添加了类型系统和一些其他特性。TypeScript的优势在于&#xff1a; 静态类型检查&#xff1a;TypeScript的最大卖点是它的静态类型系统。这允许开发者在编写代码…

PHP 异步编程:从入门到精通

异步编程简介 异步编程是一种允许程序在等待某些操作&#xff08;如I/O操作或长时间运行的任务&#xff09;完成时继续执行其他任务的编程模式。这种方式可以显著提高应用程序的效率&#xff0c;尤其是在处理高延迟操作时。 PHP异步编程的实现 在PHP中&#xff0c;实现异步编…

SpringCloud 配置 feign.hystrix.enabled: true 不生效

SpringCloud 配置 feign.hystrix.enabled: true 不生效的原因 feign 启用 hystrix feign 默认没有启用 hystrix&#xff0c;添加配置&#xff0c;启用 hystrix feign.hystrix.enabledtrue application.yml 添加配置 feign:hystrix:enabled: true启用 hystrix 后&#xff0c;访…

rpm方式安装jdk1.8

1、查询系统中是否已经安装jdk rpm -qa |grep java 或 rpm -qa |grep jdk 2、卸载已有的openjdk rpm -e --nodeps java-1.7.0-openjdk rpm -e --nodeps java-1.7.0-openjdk-headless rpm -e --nodeps java-1.8.0-openjdk rpm -e --nodeps java-1.8.0-openjdk-headless3、安装j…

Windows11系统下Docker环境搭建教程

目录 前言Docker简介安装docker总结 前言 本文为博主在项目环境搭建时记录的Docker安装流程&#xff0c;希望对大家能够有所帮助&#xff0c;不足之处欢迎批评指正&#x1f91d;&#x1f91d;&#x1f91d; Docker简介 Docker 就像一个“容器”平台&#xff0c;可以帮你把应用…

RuoYi框架中的数据完整性异常处理

案例&#xff1a;当你删除的表数据包含外键&#xff0c;关联其他表数据时。删除当前数据&#xff0c;会造成其他数据成为“孤儿”,可能会造成数据混乱。因此我们需要再MySQL中进行外键约束 具体的SQL语句&#xff1a; SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- -------…

北京数字孪生工业互联网可视化技术,赋能新型工业化智能制造工厂

随着北京数字孪生工业互联网可视化技术的深入应用&#xff0c;新型工业化智能制造工厂正逐步迈向智能化、高效化的全新阶段。这项技术不仅实现了物理工厂与数字世界的精准映射&#xff0c;更通过大数据分析、人工智能算法等先进手段&#xff0c;为生产流程优化、资源配置合理化…

xmind怎么把左边的主题换到右边

如图&#xff0c;样式——结构这里改变方向即可 附录&#xff1a;快捷键助手&#xff1a;CtrlShift/ 查看快捷键 1.常规 新建思维导图------------------CtrlN 打开--------------------------CtrlO 保存--------------------------CtrlS 另存为------------------------Ct…

Servlet 3.0新特征

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhlServlet 3.0概述 Servlet 3.0规范是在2009年随着Java EE 6的发布而推出的。它引入了一系列新特性和改进,旨在简化Web应用的开发和部署过程,并提高Web应用的性能和可扩展性。Servlet 3.0的发布标…

科技赋能,商贸物流新速度 —— 智慧供应链商城加速企业成长

科技赋能&#xff0c;商贸物流新速度 —— 智慧供应链商城加速企业成长 随着科技的飞速发展&#xff0c;AI&#xff08;人工智能&#xff09;、大数据、物联网等先进技术正深刻重塑着商贸物流行业&#xff0c;推动其向更高效、更智能、更环保的方向迈进。这些技术的应用不仅提…

在MySQL中,要查询所有用户及其权限,您可以使用以下命令:

文章目录 1、查询所有用户1.1、登录数据库1.2、select user,host from mysql.user; 2、查看用户的权限 1、查询所有用户 1.1、登录数据库 [rootlocalhost ~]# docker exec -it spzx-mysql /bin/bash rootab66508d9441:/# mysql -uroot -p123456 mysql: [Warning] Using a pas…

详解mysql和消息队列数据一致性问题

目录 前言 保持系统数据同步&#xff08;双写问题&#xff09; 消息队列消息丢失的问题 总结 前言 在当今互联网飞速发展的时代&#xff0c;随着业务复杂性的不断增加&#xff0c;消息队列作为一种重要的技术手段&#xff0c;越来越多地被应用于各种场景。它们不仅能有效解…

CRUD 开发工具 NocoBase 与 Refine 对比

引言 今天我们来聚焦两款非常优秀的开源 CRUD 开发工具&#xff1a;NocoBase 和 Refine&#xff0c;它们分别是无代码/低代码开发平台和低代码前端开发框架的典型代表。 特别值得一提的是&#xff0c;NocoBase 截止目前已经在GitHub 上获得了 12k 的 Star。Refine 作为 Retool…

「OC」多线程的学习——NSThread

「OC」多线程的学习——NSThread 文章目录 「OC」多线程的学习——NSThread线程(process) 和 进程(thread) 的区别多线程NSThreadNSThread的创建NSThread的方法常见API线程状态控制方法 NSThread线程的状态 NSThread的多线程隐患售票窗口例子 synchronize关键字NSThread的线程通…

【保姆级教程】UMLS工具——MetaMap安装及使用

专家词典 https://lhncbc.nlm.nih.gov/LSG/Projects/lexicon/current/web/index.html SPECIALIST 词典是一个大型的生物医学和通用英语句法词典&#xff0c;旨在提供 SPECIALIST 自然语言处理系统 (NLP) 所需的词汇信息&#xff0c;其中包括 MetaMap 和词汇工具等。它旨在成为…

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…

软考论文《论大数据处理架构及其应用》精选试读

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法&#xff0c;以模型构造、模型转换和精化为核心&#xff0c;提供了一套软件设计的指导规范。在模型驱动架构环境下&#xff0c;通过创建出机器可读和高度抽象的模型实现对不同问题域的描述&#xff0c;这些模型…

算法:按既定顺序创建目标数组

力扣1389 提示&#xff1a; 1 < nums.length, index.length < 100nums.length index.length0 < nums[i] < 1000 < index[i] < i 题解&#xff1a; class Solution {public int[] createTargetArray(int[] nums, int[] index) {int[] target new int[num…