GDI+图形图像技术1
System.Drawing命名空间提供了对GDI+基本图形功能的访问,其中一些子命名空间中提供了更高级的功能。
GDI+由GDI发展而来,是Windows图形显示程序与实际物理设备之间的桥梁。
GDI+是GDI的增强版,主要提供以下三类服务:
1)二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。
2)图像处理:提供Bitmap、Image等类。
3)文字显示:支持使用各种字体,字号和样式来显示文本。
GDI接口是基于函数的,而GDI+是基于C++类的对象化的应用程序编程接口,因此使用起来比GDI更方便。
Graphics对象表示GDI+绘图表面,是用于创建图形图像的对象。
创建Graphics对象一般有三种方式:
1)Paint事件的PaintEventArgs中Graphics对象
2)用CreateGraphics方法创建Graphics对象
3)从Image创建Graphics对象
namespace WindowsFormsApplication2 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g1 = e.Graphics; //第一种方式
Bitmap img1 = new Bitmap(300, 300);
Graphics g2 = Graphics.FromImage(img1); //第二种方式
Graphics g3 = this.CreateGraphics(); //第三种方式
MessageBox.Show("创建成功!");
}
}
}
创建Pen对象:钢笔
namespace WindowsFormsApplication2 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g1 = e.Graphics;
Pen p = new Pen(Color.Blue, 1); //蓝色,宽度为1个像素宽
g1.DrawEllipse(p, 0, 0, 300, 300); //画椭圆
g1.Dispose();
}
}
}
创建Brush对象(笔刷)
1)SolidBrush 纯颜色填充图形
2)TextureBrush 使用基于光栅的图像(位图,JPG等)填充图形
3)LinearGradientBrush 使用颜色渐变填充图形
4)PathGradientBrush 使用渐变色填充图形,渐变方向是从有路径定义的图形边界指向图形的中心
5)HatchBrush 使用各种图案填充图形
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g1 = e.Graphics;
Brush b1 = new SolidBrush(Color.Blue); //定义蓝色的画笔(纯颜色填充图形)
g1.FillEllipse(b1, 0, 0, 100, 200);
g1.Dispose();
}
private void Form1_Paint(object sender, PaintEventArgs e) {
string path = @"e:\hello\1.jpg";
Graphics g1 = e.Graphics;
Bitmap img;
if (System.IO.File.Exists(path)) {
img = new Bitmap(path);
Brush br = new TextureBrush(img);
g1.FillEllipse(br, 0, 0, 200, 200);
br.Dispose();
} else {
MessageBox.Show("图片文件不存在!");
}
g1.Dispose();
}
LinearGradientBrush使用前要先引入System.Drawing.Drawing2D命名空间
GDI+提供水平、垂直和对角线方向线性渐变。在默认情况下,线性渐变中的颜色均匀地变化。也可以自定义渐变,使颜色非均匀变化。
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g1 = e.Graphics;
LinearGradientBrush lgb = new LinearGradientBrush(
new Point(0, 0), //定义起始点
new Point(300, 300), //定义终点
Color.FromArgb(255, 0, 0, 255), //起始颜色
Color.FromArgb(255, 0, 255, 0) //终止颜色
);
g1.FillEllipse(lgb, 0, 0, 200, 200);
g1.Dispose();
}
在GDI+中,路径是由GraphicsPath对象维护的一系列线条和曲线。
private void Form1_Paint(object sender, PaintEventArgs e) {
GraphicsPath gp = new GraphicsPath();
gp.AddEllipse(50, 0, 200, 300);
PathGradientBrush pgb = new PathGradientBrush(gp);
pgb.CenterColor = Color.FromArgb(255, 0, 0, 255);
Color[] colors = { Color.FromArgb(255, 0, 255, 255) };
pgb.SurroundColors = colors;
e.Graphics.FillEllipse(pgb, 50, 0, 200, 300);
}
阴影图案由两种颜色组成:背景色、在背景上形成图案的线条的颜色。若要用阴影图案填充闭合的形状,需使用HatchBrush类对象。
private void Form1_Paint(object sender, PaintEventArgs e) {
//三个参数:阴影样式、阴影线颜色、背景颜色
HatchBrush hb = new HatchBrush(HatchStyle.LargeCheckerBoard,Color.Red,Color.Yellow);
e.Graphics.FillEllipse(hb, 0, 0, 300, 300);
}
画矩形
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red, 2);
g.DrawRectangle(p, 10, 10, 260, 230); //画笔,左上角坐标,右下角坐标
p.Dispose();
g.Dispose();
}
画弧、扇形
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red, 2);
g.DrawArc(p, 100, 50, 200, 200, 90, 150); //弧
g.DrawPie(p, 0, 200, 300, 200, 90, 150); //扇形
p.Dispose();
g.Dispose();
}
画多边形
private void Form1_Paint(object sender, PaintEventArgs e) {
Graphics g = e.Graphics;
Pen p = new Pen(Color.Red, 2);
Point[] pg ={
new Point(0,0),
new Point(190,30),
new Point(260,260),
new Point(230,230),
new Point(160,260)
};
g.DrawPolygon(p, pg);
p.Dispose();
g.Dispose();
}
ColorDialog控件:调色板
private void button1_Click(object sender, EventArgs e) {
if (colorDialog1.ShowDialog() == DialogResult.OK) {
this.BackColor = colorDialog1.Color;
}
}
FontDialog控件:字体选择板
private void button1_Click(object sender, EventArgs e) {
if (fontDialog1.ShowDialog() == DialogResult.OK) {
richTextBox1.Font = fontDialog1.Font;
}
}
GDI+图形图像技术1的更多相关文章
- 超全面的.NET GDI+图形图像编程教程
本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ (*^_^*) 本人也为了学习深刻,另一方面也是为了 ...
- [转]超全面的.NET GDI+图形图像编程教程
本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ GDI+绘图基础 编写图形程序时需要使用GDI(Gr ...
- GDI+图形图像处理技术中Pen和Brush的简单使用和简单图形的绘制(C#)
1.Graphics Graphics对象是GDI+绘图表面,因此在Windows窗体应用程序中要使用GDI+创建绘图,必须要先创建Graphics.在给窗体注册一个Paint事件后,Graphics ...
- HMS Core图形图像技术展现最新功能和应用场景,加速构建数智生活
[2022年7月15日,杭州]HUAWEI Developer Day(华为开发者日,简称HDD)杭州站拉开帷幕.在数字经济不断发展的今天,开发者对图形图像的开发需求更加深入和多样化,从虚拟环境重构到 ...
- GDI+图形图像处理技术——GDIPlus绘图基础
GDI+概述 GDI在windows中定义为Graphis Device interface,及图形设备接口,是Windows API(application Programming Interfac ...
- C# .NET开发图形图像程序时提示"GDI+ 中发生一般性错误"
今天突然收到一封信,说我那个极度复杂的Marshal的问题被解决了(http://www.cnblogs.com/hotcan/archive/2005/01/12/91007.html).顿时感觉好 ...
- C#_GDI+详细教程(图形图像编程基础)
第7章 C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1 GDI+绘图基础 编写图形程序时需要使用GDI( ...
- 【Windows编程】系列第五篇:GDI图形绘制
上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数 ...
- HTML5图形图像处理技术研究
摘要:图形图像处理平台大部分是传统的C/S架构的桌面应用程序,维护困难,共享性差,而B/S架构的Web程序具有易维护.易共享的优点.本文研究了基于HTML5的Web图形图像处理技术,用HTML5实现了 ...
随机推荐
- 洛谷P1094——纪念品分组(简单贪心)
https://www.luogu.org/problem/show?pid=1094 题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得 的纪念品价值相对均 ...
- Java基础系列(33)- 计算器
package method; import java.util.Scanner; public class Demo09 { static double result; static String ...
- js模块化开发 AMD CMD Commonjs
在es6全面实行开来之前 js实现模块开发方案有: 1.AMD 异步模块开发定义 依赖前置,requireJs应用了这一规范 require([module], callback); 加载完后回调 ...
- NetCore5实现https请求
前言 本文主要介绍在NetCore5中,实现证书加载和https访问请求. 证书准备 首先我们先创建一个自定义的证书Kiba518.pfx. 证书创建参考:最通俗易懂的RSA加密解密指导. 然后将证书 ...
- 让selenium规避网站的检测
在使用selenium对某些网站模拟访问的时候会被检测出来,检测出来之后就有可能拿不到我们想要的数据,那么我们怎么可以规避掉呢? 在使用谷歌浏览器的时候我们右键-检查-console-输入window ...
- UOJ#454-[UER #8]打雪仗【通信题】
正题 题目链接:https://uoj.ac/problem/454 题目大意 \(Alice\)有一个长度为\(2n\)的\(01\)串,\(Bob\)有\(n\)个在\([1,2n]\)位置的下标 ...
- P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】
除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出\(A,B,d\)求有多少对\((a,b)\ ...
- Web项目自动打开并且全屏
前言 在项目当中,有些需要开机自动打开并且还要全屏.通过总结,得到以下结论:大致方法一样(IE.火狐.谷歌支持),个别的只是命令不同,以火狐浏览器为例. 浏览器全屏打开指定网页设置方法 新建浏览器快捷 ...
- 微信小程序_快速入门02
01我们学习了环境的准备和简单的demo,现在是时候来学习简单的页面编写了,首先我们来学习一些常用的基础标签: 一.view盒子,就是类似于div的盒子,可以用来存其他元素的容器. 二.text 文本 ...
- 02Prism WPF 入门实战 - 建项
1.概要 Prism介绍 Github: https://github.com/PrismLibrary/Prism 开发文档:https://prismlibrary.com/docs/ Prism ...