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;
            }
        }
时间: 2024-12-23 04:43:12

GDI+图形图像技术1的相关文章

超全面的.NET GDI+图形图像编程教程

本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ (*^_^*) 本人也为了学习深刻,另一方面也是为了分享给大家,纯手工码了好几天的字,喜欢的表忘了点赞哦~给点小小的动力~ 目录: <GDI+绘图基础> 1 GDI+概述 2 Graphics类 2.1 Graphics类的方法成员 2.2 引用命名空间 3 常用画图对象 3.1 Pen类 3.2 Color结构 3.3 Font类 3.4 Bru

详解图形图像技术如何生成验证码?

 先说一下思路: (1)先做出基本样式 (2)用图像处理技术生成验证码,并存session (3)注意img的路径,后面要跟一个随机数,便于每次刷新时,传的地址都是不一样的 (4)用form表单把用户输入的验证码提交给form.php页面,进行判断,如果正确返回"输入正确",否则,返回"输入错误",空未做处理.  重点是: (1)生成验证码时,要存一下session: (2)判断时,要用session存的验证码和用户输入的验证码进行判断是否输入正确: (3)判断后,

图形图像技术在手游中的潜在应用

模式识别.图像处理.机器视觉等是近年来学生圈火热的话题,属于人工智能的一部分.本文就笔者所了解的一些技术前言,谈谈可能在手机游戏中应用. 1. 模型的变形(Morphing ) 基本算法: 贝塞尔平滑,找到两个模型的对应点,将点平移过去,如下图, (P1~P4) ->Q1, P5->Q2, P6->Q3, P7->Q4, P8->Q5, 便有了变型的效果. 风险:时间消耗问题:贴图问题: 解决方案:优化.预烘焙. 包含2D.3D等.一般2D游戏的人物.道具模型为图片对象,在游

利用HTML5技术在Web上实现对图形图像的处理——WebPhotoshop精简版

WebPhotoshop精简版是利用HTML5技术在Web上实现对图形图像的处理,构建易维护.易共享.易于拓展.实时性的Web图形图像处理平台. 精简版功能包括:图形绘制.图像处理.图像操作.完整版包括多人协作操作图像.实时交流.图片搜索,同时实现实时的多人协作处理图形图像技术.(完整版后续上传)一.功能说明:1.图形绘制 实现铅笔.画笔(书法画笔.喷枪.蜡笔.记号笔.水彩画笔)的绘制效果.实现直线.曲线.椭圆(圆).矩形(圆角矩形).三角形(直角三角形.等边三角形.任意三角形).多边形的绘制.

三维图像技术与OpenGL基础理论

英文原文:3D Graphics with OpenGL Basic Theory 中文译文:三维图像技术与OpenGL基础理论 1. 计算机图像硬件 1.1 GPU(图像处理单元) 如今,计算机拥有用来专门做图像处理显示的GPU模块,拥有独立的图像处理储存(显存). 1.2 像素和画面 任何图像显示都是基于栅格的格式.一个栅格既是一张二维的像素直角坐标网.像素具有两个属性:颜色和位置.颜色通常使用RGB(红绿蓝)来表示,典型的有用8位或者24位二进制位(真彩色)表示一种颜色.位置则用坐标(x,

【Windows编程】系列第五篇:GDI图形绘制

上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解.GDI可以绘制点.直线曲线.填充封闭区域.位图以及文本,其中文本部分已经在上一篇中将了,请参考[Windows编程]系列第三篇:文本字符输出. 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我

深度神经网络识别图形图像的基本原理(转)

摘要:本文将详细解析深度神经网络识别图形图像的基本原理.针对卷积神经网络,本文将详细探讨网络中每一层在图像识别中的原理和作用,例如卷积层(convolutional layer),采样层(pooling layer),全连接层(hidden layer),输出层(softmax output layer).针对递归神经网络,本文将解释它在在序列数据上表现出的强大能力.针对通用的深度神经网络模型,本文也将详细探讨网络的前馈和学习过程.卷积神经网络和递归神经网络的结合形成的深度学习模型甚至可以自动生

MFC图形图像

一.CDC类 CDC类简介 CDC类是一个设备上下文类. CDC类提供了用来处理显示器或打印机等设备上下文的成员函数,还有处理与窗口客户区关联的显示上下文的成员函数.使用CDC的成员函数可以进行所有的绘图操作,包括处理绘图工具.GDI对象的选择.颜色和调色板的处理.获取和设置绘图属性.映射.窗口范围.坐标转换.剪切以及绘制直线.简单图形.椭圆和多边形等,另外它还为文本输出.处理字体.使用打印机跳转和滚动等提供了成员函数. 如上所述,CDC类几乎封装了所有的Windows GDI函数,另外,MFC

HTML5图形图像处理技术研究

摘要:图形图像处理平台大部分是传统的C/S架构的桌面应用程序,维护困难,共享性差,而B/S架构的Web程序具有易维护.易共享的优点.本文研究了基于HTML5的Web图形图像处理技术,用HTML5实现了一个Web图形图像处理程序,并通过理论分析和实验得出:HTML5在Web图形图像处理上具有优势,存在基于HTML5实现Web处理图形图像的可能性. 关键词:HTML5:Web:Canvas:图形图像处理 引言 传统C/S架构的桌面图形图像处理程序,虽然处理速度较快,但由于界面和算法逻辑都集中在客户端