網站首頁 編程語言 正文
一、Graphics
GDI+是GDI(Windows Graphics Device Interface)的后繼者,它是.NET Framework為操作圖形提供的應用程序編程接口,主要用在窗體上繪制各種圖形圖像,可以用于繪制各種數據圖像、數學仿真等。
Graphics類是GDI+的核心,它提供將對象繪制到顯式設備的方法。Graphics類封裝了繪制直線、曲線、圓形、圖像和文本的方法,是一切GDI+操作的基礎類。在繪圖之前,必須在指定的窗體上創建一個Graphics對象,才能調用Graphics類的方法畫圖。
1、創建Graphics類對象
1、Paint事件
在窗體或控件的Paint事件中創建,將其作為PaintEventArgs的一部分。在為控件創建繪制代碼時,通常會使用此方法。
例如,在Paint事件中創建Graphics對象:
public partial class Form1 : Form
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics; // e.ClipRectangle;//剪切區域,即被遮擋的部分
g.DrawLine(Pens.Wheat, 0, 0, 2, 2);
}
}
2、 CreateGraphics方法
調用窗體或控件的CreateGraphics方法可以獲取對Graphics對象的引用,該對象表示控件或窗體的繪圖畫面。如果在已存在的窗體或控件身上繪圖,應該使用此方法
例如,在窗體的Load事件中,通過CreateGraphics方法創建Graphics對象
private void Form1_Load(object sender, EventArgs e) //窗體的Load事件
{
Graphics g; //聲明一個Graphics對象
g = this.CreateGraphics();
}
3 、Graphics.FromImage方法
由從Image繼承的任何對象創建Graphics對象,調用Graphics.FromImage方法即可,該方法在需要更改已存在的圖像時十分有用,例:
private void Form1_Load(object sender, EventArgs e)
{
Bitmap mbit = new Bitmap(@"C:\test.bmp");
Graphics g = Graphics.FromImage(mbit);
}
2、Graphics類的屬性
- Clip??? 獲取或設置 Region,它限定此 Graphics 的繪圖區域。
- ClipBounds??? 獲取一個 RectangleF 結構,該結構限定此 Graphics 的剪輯區域。
- VisibleClipBounds??? 獲取此 Graphics 的可見剪輯區域的邊框。
- CompositingQuality??? 獲取或設置繪制到此 Graphics 的合成圖像的呈現質量。
- SmoothingMode??? 獲取或設置此 Graphics 的呈現質量。
- DpiX??? 獲取此 Graphics 的水平分辨率。
- DpiY??? 獲取此 Graphics 的垂直分辨率。
- PageScale??? 獲取或設置此 Graphics 的世界單位和頁單位之間的比例。
- PageUnit??? 獲取或設置用于此 Graphics 中的頁坐標的度量單位。
3、Graphics類的常用方法
- 畫線條
DrawLine??? 繪制一條連接由坐標對象指定的兩個點的線條
DrawLines??? 繪制一列連接一組Point結構的線段
DrawBezier??? 繪制由四個Point結構定義的貝塞爾樣條
DrawBeziers??? 從Point結構的數組繪制一系列貝塞爾樣條
DrawCurve??? 繪制經過一組指定的Point結構的基數樣條 - 畫可填充線條
DrawEllipse??? 繪制一個由一對坐標、寬度和高度指定的橢圓
DrawPath??? 繪制GraphicsPath對象
DrawPie??? 繪制一個扇形,該扇形由一個坐標對象,寬度和高度,以及兩條射線所指定的橢圓指定
DrawPolygon??? 繪制由一組Point結構定義的多邊形
DrawRectangle??? 繪制由坐標對。寬度和高度指定的矩形
DrawRectangles??? 繪制一系列由Rectangle結構指定的矩形
DrawArc??? 繪制一段弧線,它表示由一對坐標、寬高指定的橢圓部分 - 填充區域
FillEllipse??? 填充邊框所定義的橢圓內部,該邊框由一對坐標、一個高度和一個寬度指定
FillPath??? 填充GraphicsPath對象的內部
FillPie??? 填充扇形內部
FillPolygon??? 填充多邊形內部
FillRectangle??? 填充由一對坐標、一個寬度和一個高度指定的矩形內部
FillRectangles??? 填充由Rectangle結構指定的一些列矩陣的內部
FillRegion??? 填充Region對象的內部 - 畫字符串、圖畫、圖標
DrawString??? 在指定位置并且用指定的Brush和Font對象繪制指定的文本字符串
DrawIcon??? 在指定坐標處繪制由指定的Icon對象表示的圖像
DrawImage??? 在指定的位置并且按原始大小繪制指定的Image對象 - 其他
MeasureString(String, Font)??? 測量用指定的 Font 繪制的指定字符串。
FromImage??? 從指定的Image對象創建行的Graphics對象
Save??? 保存此Graphics對象的當前狀態,并且GraphicsState對象標識保存的狀態
Clear??? 清除整個繪圖面并以指定背景色填充
Dispose??? 釋放由此Graphics對象使用的所有資源
二、坐標系統
GDI+定義了三種坐標系統,并提供了三種坐標轉換的方法Graphics.TransformPoints()。
- 全局坐標系統。
- 頁面(Page)坐標系統:左上角為原點,橫向x軸向右為正方向,縱向y軸向下為正方向。單位為像素。這是默認的坐標系統。
- 設備坐標系統:可以指定特定測量單位的頁面(Page)坐標系統。如果單位為像素,和頁面(Page)坐標系統相同。
1、點結構:Point和PointF
點結構有兩個成員:X,Y,表示點的x軸和y軸的坐標。其常用構造函數如下:
Point p1=new Point(int X,int Y);//X,Y為整數
PointF p2=new PointF(float X,floa Y);//X,Y為浮點數
2、尺寸結構Size和SizeF
Size和SizeF用來表示尺寸大小,有兩個成員:Width和Height。常用構造函數如下:
public Size(int width,int height);
public SizeF(float width,float height);
3、矩形結構Rectangle和RectangleF
結構Rectangle和RectangleF用來表示一個矩形,常用屬性如下:
- Top、Left,Bottom, Right:Rectangle結構坐標
- Width、Height:獲取或設置此Rectangle結構的寬、高度。
- Size:獲取或設置此Rectangle的大小。
- X、Y:獲取或設置此Rectangle結構左上角的x,Y坐標。
其常用構造函數為:
//參數為矩形左上角坐標的點結構location和代表矩形寬和高的Size結構size
Rectangle(Point location,Size size);//參數也可為PointF和SizeF
//參數為矩形左上角x和y坐標,寬,高
Rectangle(int X,int Y,int width,int height);//X和Y也可為float
4、路徑類GraphicsPath
GraphicsPath 類表示一系列相互連接的直線和曲線。 此類不能被繼承。
Graphics g = e.Graphics;
g.FillRectangle(Brushes.White, this.ClientRectangle);
GraphicsPath gp = new GraphicsPath();
gp.AddLine(10, 10, 10, 50);
gp.AddBezier(10, 50, 10, 55, 25, 70, 30, 70);
gp.AddLine(30, 70, 60, 70);
//閉合圖形
gp.CloseFigure();
//GraphicsPath類本身沒有提供顯示創建路徑的功能,所以需要把路徑對象傳給Graphics類的一個方法來顯示
g.DrawPath(Pens.Black, gp);
g.FillPath(Brushes.Orange, gp);//給路徑填充橘黃色,
gp.Dispose();
g.Dispose();
5、區域類Region類
Region類表示由矩形或由路徑構成圖形形狀的內部
1、從GraphicsPath路徑對象中創建區域,
GraphicsPath gp = new GraphicsPath();
gp.AddLine(10, 10, 10, 50);
gp.AddBezier(10, 50, 10, 55, 25, 70, 30, 70);
gp.AddLine(30, 70, 60, 70);
//閉合圖形
gp.CloseFigure();
Region reg = new Region(gp); //從GraphicsPath對象創建Region對象
//填充區域
g.FillRegion(Brushes.Green, reg);
2.從各類圖形中創建:
Region reg = new Region(new Rectangle(10, 10, 80, 20));
3.從一個區域中創建另一個區域
Region r1 = new Region(new Rectangle(10, 10, 80, 20));
RegionData r1Data = r1.GetRegionData();//區域數據
Region r2 = new Region(r1Data);? //構造函數不接受區域對象本身,可以接受區域數據數組。
4.區域的并集和交集
示例:
Graphics g = e.Graphics;
Rectangle rect1 = new Rectangle(50, 10, 50, 130);
Rectangle rect2 = new Rectangle(10, 50, 130, 50);
//設置Region為第一個矩形
Region reg = new Region(rect1);
//用Rect2提取Region中的交集
reg.Intersect(rect2);
g.FillRegion(Brushes.Orange, reg);
g.DrawRectangle(Pens.Black, rect1);
g.DrawRectangle(Pens.Black, rect2);
三、顏色
1、Color結構
Color結構表示顏色,結構中包含一個無符號32位數代表顏色。任何一種顏色可以用ARGB顏色(alpha、紅、綠、藍)表示。Color結構通過表態屬性公開了140個命名顏色。。常用方法如下:
- public static Color FromArgb(int alpha,int rr,int gg,int bb);
從四個分量(透明度、紅色、綠色和藍色)值創建Color結構。每個分量的值僅限于8位(小于256)。alpha值表示透明度,=0為完全透明,=255為完全不透明 - public static Color FromArgb(int rr,int gg,int bb);
從指定的8位顏色值(紅色、綠色和藍色)創建Color結構。透明度值默認為255(完全不透明)。每個分量的值僅限于8位(小于256)。紅色為(255,0,0),綠色為(0,255,0),藍色為(0,0,255)。 - public static Color FromArgb(int alpha,Color color);
從指定的Color結構創建新Color結構,使用新指定的透明度值alpha。alpha值僅限于8位。
創建實例
//創建Color實例的參數為 r,g,b; //參數為紅,綠,藍三種原色,透明度為默認,即完全不透明.
Color cl = Color.FromArgb(200, 200, 200);
//調用靜態FromName方法
Color cl = Color.FromName("PowderBlue"); //字符串參數必須包含一個KnownColor枚舉值的名稱.
使用顏色:
Color red=Color.Red;
red.GetBrightness();
red.GetHue();
red.GetSaturation();
2、ColorTranslator類
- FromHtml(String)??? 將 HTML 顏色表示形式翻譯成 GDI+ Color 結構。
Color myColor = ColorTranslator.FromHtml("Blue");
Color myColor = ColorTranslator.FromHtml("H00000");
- ToHtml(Color)??? 將指定的 Color 結構翻譯成 HTML 字符串顏色表示形式。
string htmlColor = ColorTranslator.ToHtml( Color.Red);
string htmlColor = ColorTranslator.ToHtml( Color.FromArgb(255,255,255));
四、畫筆Pen類
畫筆,定義用于繪制直線和曲線的對象。
定義畫筆:
Pen pen1 = new Pen(Color, Single); //參數為顏色Color,單精度浮點數Sigle;寬度默認為1;
Pen pen2 = Pen(Brush, Single); // 使用指定的 Pen 和 Brush 初始化 Width 類的新實例。
使用畫筆:
//畫實線
Pen pen = new Pen(Color.Red, 3);
//確定線的首位位置
Point point1 = new Point(10, 50);
Point point2 = new Point(250, 50);
Graphics g = this.CreateGraphics();
g.DrawLine(pen, point1, point2);
五、畫刷Brush
畫刷:定義用于填充圖形形狀(如矩形、橢圓、餅形、多邊形和封閉路徑)的內部的對象。只是一個抽象基類。
Rectangle rect1 = new Rectangle(20, 80, 250, 100);
// (實心實心刷)
SolidBrush sbrush = new SolidBrush(Color.DarkOrchid);
//(紋理刷)
TextureBrush textureBrush = new TextureBrush(new Bitmap(@"e:/123.jpg"));
//(梯度、線性漸進刷)
LinearGradientBrush lbrush = new LinearGradientBrush(rect1, Color.DarkOrange, Color.Aquamarine, 45);
//路徑漸進畫刷
PathGradientBrush pathbrush = new PathGradientBrush(graphicsPath);
//(陰影刷)
HatchBrush hbrush = new HatchBrush(HatchStyle.DiagonalCross, Color.DarkOrange, Color.Aquamarine);
e.Graphics.FillRectangle(sbrush, rect1); // (實心刷)
e.Graphics.FillRectangle(textureBrush, rect1); //(紋理刷)
e.Graphics.FillRectangle(lbrush, rect1); //(梯度刷)
e.Graphics.FillRectangle(hbrush, rect1); //(陰影刷)
六、字體 Font
Font類有兩個構造函數:
第一個是new Font(字體名稱,字號),例如,label1.Font=new Font("黑體",9)。
第二個是new Font(字體名稱,字號,字體風格),其中第三個參數是枚舉類型。
定義字體:
//例如修改標簽控件字體為斜體:
label1.Font=new Font("黑體",9,label1.Font.Style|FontStyle.Italic);
//修改標簽控件字體不為斜體:
label1.Font=new Font("黑體",9,label1.Font.Style&~FontStyle.Italic);
字體用法
// Create font and brush.
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
// Draw string to screen.
e.Graphics.DrawString("Sample Text", drawFont, drawBrush, new PointF(150.0F, 150.0F));
七、圖像
見
圖像Image類、打印Printing相關
原文鏈接:https://www.cnblogs.com/springsnow/p/9433977.html
相關推薦
- 2022-06-06 Postgresql split_part()函數,根據符號切割字符串
- 2022-01-21 編程實現打印楊輝三角(要求使用一維數組處理)
- 2022-09-26 Linux查看操作系統的版本,關閉防火墻,主機名配置,時區時間配置
- 2022-12-07 React元素與組件的區別示例詳解_React
- 2021-10-25 C語言編寫漢諾塔游戲_C 語言
- 2022-09-13 Python列表和集合的效率大比拼_python
- 2022-08-29 Python常見異常處理總結_python
- 2023-11-26 解決:element ui表格表頭自定義輸入框單元格el-input不能輸入問題
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支