c# GDI+
A.GDI、GDI+、GUI
https://blog.csdn.net/dust__/article/details/103675205
https://blog.csdn.net/xunminwei0021/article/details/105003907
https://www.cnblogs.com/HaoYangkun/p/14245560.html
https://blog.csdn.net/weixin_42291376/article/details/127854736
B.案例
https://blog.csdn.net/wenchm/article/details/134717146
https://www.toutiao.com/article/7232425582506557987/
https://www.toutiao.com/article/7232056007227081254/
https://www.toutiao.com/article/7231651555148153379/
C.GDI+API参考:
https://www.jb51.net/article/248117.htm
1。什么是GDI?什么是GDI+? GDI和GDI+区别? plus
GDI:图形设备接口,英文全称:Graphics Device Interface。编写图形程序时需要使用GDI。从程序设计的角度看,GDI包括两个部分:GDI对象和GDI函数。【GDI是使用硬件加速图形渲染的引擎】。
GDI+:微软在Windows 2000以后操作系统中提供的新的图形设备接口。【GDI+不是使用硬件加速的】,而且GDI+2.0比GDI+更快。
GDI+主要提供三方面的服务:
a.二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以及实际进行绘制的类。 几何图形
b.图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式。
c.文字显示:GDI+支持使用各种字体、字号和样式来显示文本。
总结:绘制基本的几何图形,可以绘制复杂图片,可以绘制文字
矢量图形:https://baike.baidu.com/item/二维计算机图形/4797297
矢量图形SVG:https://www.runoob.com/svg/svg-tutorial.html
GDI+比GDI的优越性主要展现在2个方面:扩展了新功能,变成更加简易灵活,性能高。
GDI 与 GDI+ 详细区别参考:
https://www.cnblogs.com/HaoYangkun/p/14245560.html
2。什么是GUI?GDI和GUI区别?
GUI:是图形用户接口,英文全称:Graphics User Interface。指用户界面,如窗体,控件。 即UI界面层的相关接口。
GDI:是图形设备接口,包含图形编程相关的对象和方法。
详细参考:https://www.cnblogs.com/HaoYangkun/p/14245560.html
3。GDI+ 重要命令空间?
System.Drawing
System.Drawing.Text
System.Drawing.Design
System.Drawing.Drawing2D
System.Drawing.Imaging
System.Drawing.Printing
4。GDI+重要类?创建图形的3种主流方法?
Graphics类
画图方法都被包括在Graphics类中,在画任何对象时,我们首先要创建一个Graphics类实例,这个实例相当于建立了一块画布,有了画布才可以用各种画图方法进行绘图。
创建图形的3种主流方法:
a.Graphics g = e.Graphics; 注意:e的类型是PaintEventArgs 最推荐的方法
b.Graphics g = this.CreateGraphics();或Graphics pg = this.panel1.CreateGraphics(); 注意:this是窗体对象,大多数控件都有CreateGraphics()
c.Graphics g = Graphics.FromImage(img); 注意:参数类型是Image或BitImage
5。坐标系统?
在GDI+中所采用的坐标系统,与平时人们较常用的坐标系统不同,主要差别在于,一般的二维坐标系,X轴与Y轴分别是往右往上递增(左图),而GDI+所采用的坐标系,X轴与Y轴则分别是往右往下递增(右图)。
详细参考:https://blog.csdn.net/weixin_42291376/article/details/127854736
6。绘图的基本步骤?
a. 绘画的时机?Paint事件
b. 创建Graphics对象,并配置它;才有了绘制图形的能力。
c. 使用Graphics对象提供的相关方法,进行画图。画图时会依赖其他对象,如:Pen,Brush,Font,Color等
7。各种绘图练习:
1。坦克大战
https://www.cnblogs.com/misakayoucn/p/17617616.html
2。验证码
https://www.jb51.net/article/248127.htm
3。条形码
https://www.jb51.net/article/36291.htm
https://www.cnblogs.com/soliang/p/18047129
4。文字任意旋转
https://www.jb51.net/article/137976.htm
https://www.jb51.net/article/55403.htm
https://www.jb51.net/article/138077.htm
5。GDI+画圆柱体
https://blog.csdn.net/qq_30725967/article/details/85335577
6。GDI+把图片分割成九宫格
https://www.jb51.net/article/235961.htm
7。GDI+裁切和缩放图像
https://learn.microsoft.com/zh-cn/dotnet/desktop/winforms/advanced/cropping-and-scaling-images-in-gdi?view=netframeworkdesktop-4.8
8。GDI+实现可拖动的图形
https://www.cnblogs.com/lesliexin/p/16554752.html
下载字体:
https://font.chinaz.com/
https://www.fonts.net.cn/
发光文本
public static void DrawGlowingString(Graphics graphics, string text, Font font, Color textColor, Color glowColor, float x, float y) { // 设置文本渲染质量 graphics.TextRenderingHint = TextRenderingHint.AntiAlias; // 绘制发光效果 using (Brush glowBrush = new SolidBrush(glowColor)) { // 在文本下方绘制发光,可以通过调整Offset属性改变发光大小和方向 graphics.DrawString(text, font, glowBrush, x - 1, y + 1); graphics.DrawString(text, font, glowBrush, x + 1, y - 1); } // 绘制实色文本 using (Brush solidBrush = new SolidBrush(textColor)) { graphics.DrawString(text, font, solidBrush, x, y); } }