百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

135.C# GDI+基础-创建Graphics类对象

csdh11 2025-03-06 13:53 4 浏览

摘要


GDI+是GDI(Windows Graphics Device Interface)的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像、数学仿真等。

Graphics类是GDI+的核心,它提供将对象绘制到显式设备的方法。Graphics类封装了绘制直线、曲线、圆形、图像和文本的方法,是一切GDI+操作的基础类。在绘图之前,必须在指定的窗体上创建一个Graphics对象,才能调用Graphics类的方法画图。

正文


Paint事件
在窗体或控件的Paint事件中创建,将其作为PaintEventArgs的一部分。在为控件创建绘制代码时,通常会使用此方法。

在Paint事件中创建Graphics对象

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    Graphics g = e.Graphics;
    Pen myPen = new Pen(Color.Blue, 2);//申明一个画笔,蓝色,宽度为2
    g.DrawLine(myPen, 10, 30, 10, 300);//划一条线
}

调用窗体或控件的CreateGraphics方法可以获取对Graphics对象的引用,该对象表示控件或窗体的绘图画面。

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    Graphics g = this.CreateGraphics();
    Pen myPen = new Pen(Color.Blue, 2);//申明一个画笔,蓝色,宽度为2
    g.DrawLine(myPen, 10, 30, 10, 300);//划一条线
}

由从Image继承的任何对象创建Graphics对象,调用Graphics.FromImage方法即可。

Graphics g = Graphics.FromImage(new Bitmap("D:\\MyProject\\ProjectC#\\carbon.jpg"));

属性



Clip

获取或设置 Region,它限定此 Graphics 的绘图区域。

ClipBounds

获取一个 RectangleF 结构,该结构限定此 Graphics 的剪辑区域。

CompositingMode

获取一个值,该值指定如何将合成图像绘制到此 Graphics。

CompositingQuality

获取或设置绘制到此 Graphics 的合成图像的呈现质量。

DpiX

获取此 Graphics 的水平分辨率。

DpiY

获取此 Graphics 的垂直分辨率。

InterpolationMode

获取或设置与此 Graphics 关联的插补模式。

IsClipEmpty

获取一个值,该值指示此 Graphics 的剪辑区域是否为空。

IsVisibleClipEmpty

获取一个值,该值指示此 Graphics 的可见剪辑区域是否为空。

PageScale

获取或设置此 Graphics 的世界单位和页单位之间的比例。

PageUnit

获取或设置用于此 Graphics 中的页坐标的度量单位。

PixelOffsetMode

获取或设置一个值,该值指定在呈现此 Graphics 的过程中像素如何偏移。

RenderingOrigin

为抵色处理和阴影画笔获取或设置此 Graphics 的呈现原点。

SmoothingMode

获取或设置此 Graphics 的呈现质量。

TextContrast

获取或设置呈现文本的灰度校正值。

TextRenderingHint

获取或设置与此 Graphics 关联的文本的呈现模式。

Transform

获取或设置此 Graphics 的几何世界转换的副本。

VisibleClipBounds

获取此 Graphics 的可见剪辑区域的边框。

方法



方法

描述

Clear

清除整个绘图面并以指定背景色填充

Dispose

释放由此Graphics对象使用的所有资源

DrawArc

绘制一段弧线,它表示由一对坐标、宽高指定的椭圆部分

DrawBezier

绘制由四个Point结构定义的贝塞尔样条

DrawBeziers

从Point结构的数组绘制一系列贝塞尔样条

DrawCurve

绘制经过一组指定的Point结构的基数样条

DrawEllipse

绘制一个由一对坐标、宽度和高度指定的椭圆

DrawIcon

在指定坐标处绘制由指定的Icon对象表示的图像

DrawImage

在指定的位置并且按原始大小绘制指定的Image对象

DrawLine

绘制一条连接由坐标对象指定的两个点的线条

DrawLines

绘制一列连接一组Point结构的线段

DrawPath

绘制GraphicsPath对象

DrawPie

绘制一个扇形,该扇形由一个坐标对象,宽度和高度,以及两条射线所指定的椭圆指定

DrawPolygon

绘制由一组Point结构定义的多边形

DrawRectangle

绘制由坐标对。宽度和高度指定的矩形

DrawRectangles

绘制一系列由Rectangle结构指定的矩形

DrawString

在指定位置并且用指定的Brush和Font对象绘制指定的文本字符串

FillEllipse

填充边框所定义的椭圆内部,该边框由一对坐标、一个高度和一个宽度指定

FillPath

填充GraphicsPath对象的内部

FillPie

填充扇形内部

FillPolygon

填充多边形内部

FillRectangle

填充由一对坐标、一个宽度和一个高度指定的矩形内部

FillRectangles

填充由Rectangle结构指定的一些列矩阵的内部

FillRegion

填充Region对象的内部

FromImage

从指定的Image对象创建行的Graphics对象

Save

保存此Graphics对象的当前状态,并且GraphicsState对象标识保存的状态

相关推荐

音视频命令转换工具 - FFmpeg

随着自媒体兴起,许多人会自拍视频或者找视频素材裁剪,配上背景音乐或解说,加上各种特效边框,处理后再生成新的视频文件,发布到各大平台。生成的原始视频文件都很大,我们需要转换格式或者压缩大小,便于上传或者...

视频剪辑软件,如何批量将h264转换为h265格式的视频

最近有很多朋友在问,因为剪辑、或者上传的原因,需要将视频编码转换成H265格式编码,该怎么操作呢?不知道怎么办的宝贝们,下面请随小编一起来试试吧。需要哪些工具?安装一个媒体梦工厂视频素材若干怎么快速剪...

1080秒变4K,让PotPlayer开启“超分辨率”播放视频文件

大家好,我是大卫呆。1080P的视频能秒变4K视频吗?通过上期节目的实机测试,答案是:...

视频编码H.265与H.264的区别-------深入浅出说监控

我们在购买监控摄像头或者录像机产品的时候,一般情况下,经销商会问你是要H.265编码格式与H.264编码格式的,很多人都会好奇,什么是H.265和H.264?他们的实际效果有什么区别?今天就从定义和作...

H.265已落后!下一代视频技术实现重大突破

来源:快科技下一代视频技术实现重大突破。从阿里云官微获悉,阿里达摩院XG实验室参与制定的新一代国际视频编码标准H.266(VVC)出炉,同等画质下将节省近50%传输流量,清晰度越高,码率节省越多。前不...

VP9 或 H.265 的 6 个比较点

直播很复杂。广播流和通过Internet传输流的整个过程涉及一系列可以采用多种格式的方法。一个重要的组件是用于媒体文件编码和解码的编解码器。编解码器还定义了可用于进行流式传输的工具类型。大大简化流...

融合通信系统播放不了H.265视频怎么解决

在融合通信项目中,视频的融合是很多项目的落地要求,随着技术的进步,需要融合的视频也是多种多样,很多项目中需要接入视频监控,布控球,无人机,视频会议等视频资源。这些视频资源使用不同的技术,不同的传输协议...

别被忽悠了!视频编码H.265与H.264的区别有多大?看完你就懂了

相信大家都听过H.265和H.264这两种编码,也看过专业术语的解释。包括电视机都会标注支持H.265格式4K视频编码,视频监控系统也会标注支持H.265。但是还是有很多人不知道什么是视频编码H.26...

视频行业迎来巨变!H.265将被淘汰,电视及流媒体全受影响

这两天,姐夫自己遇到一个问题,从一些流媒体网站上下载来的视频,比如油管上的视频,居然无法正常在Windows10上播放,必须要重新下载一个视频编码插件才行。甚至于这些视频都无法通过现有的编辑软件去做...

对于Mybaits缓存的理解

...

你居然还去服务器上捞日志,搭个 Graylog 日志收集系统不香么

一、前言...

Java 代理从 0 到彻底搞懂

一、为什么出现代理?咱们先抛开编程,想象一下生活中的场景。假如你是一位大明星,每天都有无数的活动邀约、采访请求,还有各种商务合作的洽谈。要是你亲自去处理这些事情,那你哪还有时间去拍戏、唱歌、提升自己的...

SpringBoot系列——cache缓存

  前言  日常开发中,缓存是解决数据库压力的一种方案,通常用于频繁查询的数据,例如新闻中的热点新闻,本文记录springboot中使用cache缓存。...

Spring的缓存帝国,得益于这 5个注解!

在微服务,分布式的大环境下,缓存绝对是提升系统性能的关键手段,Spring作为Java生态中最流行的企业级应用框架,它是如何实现缓存的呢?这篇文章,我们将深入探讨Spring中5个核心的缓存注解...

JVM缓存EhCache在实际业务系统中的应用及复杂场景探讨

本文将介绍JVM缓存EhCache的基本概念、原理以及在实际业务系统中的使用。文章将重点讨论EhCache在复杂场景下的应用,并提供Java语言实现的示例。1.JVM缓存EhCache简介EhCa...