前言
本文是學習C# GDI+系列的第一篇文章,簡單的介紹了GDI+的一些基本繪圖內容,比較粗糙。但本文主要是讓大家簡單的回顧一下GDI+的基本概念。本篇文章的參考代碼請在此下載 。
GDIPTest_Article1_161112_2346.rar
如果有什么疑問,或者建議,請留言聯系本人。
1 窗口重繪
Windows自動處理鼠標拖動窗體、更改窗體大小等用戶操作,自動調整窗體所占屏幕區域的大小,並進行重畫
當需要重畫時,Windows發送消息WM_PAINT
窗體對象的Paint事件用於響應WM_PAINT消息
–當窗體被擋住,並再次顯示時
–當其他窗體在主窗體上移動時
–當主窗體的尺寸變大時
–Windows只重繪必要的區域,ClipRectangle屬性
–調用Invalidate方法主動激發WM_PAINT消息
2. 繪圖內容
點 (Point)
矩形 (Rectangle)
顏色 (Color)
筆 (Pen)
畫刷 (Brush)
字體 (Font)
路徑 (GraphicsPath)
區域 (Region)
.Net中提供了兩個數據結構表示繪圖中的一點的坐標值:Point(X,Y)與PointF。其封裝了兩個變量,一個表示寬度,一個表示高度。
大多數情況下,代碼中指定的坐標、長度和寬度數值均為像素。可以使用Graphics的PageUnit屬性來確定其他的單位。
Rectangle矩形
某點是否在矩形內——Contains
矩形的放大與縮小:Inflate(為正放大,為負縮小)
求兩個矩形的交集:Intersect
求並集:Union
平移:Offset
顏色的HSB模型
Hue:色調0…360
Saturation:飽和度0…1
Brightness:亮度0…1
創建Color對象:
Color clr;
clr= Color.FromArgb(255, 255, 0, 255)
另一個方法:
Color.FromKnownColor(…)
顏色的alpha值表示顏色的透明度。創建透明的對象,須將alpha值設置為小於‘255’、
筆(Pen)
用於描繪線條
◦繪制線條、曲線、勾勒形狀輪廓
◦創建筆對象后,可通過設置其屬性,繪制出不同類型的線條
◦Width, Color
◦StartCap, EndCap:開始及結尾點的形狀
◦DashStyle:設置虛線樣式
Brushes的類型
創建Solid及Texture實心形狀
創建Hatch實心形狀
創建Gradient實心形狀
創建PathGradient實心形狀
創建Transparent實心形狀
動手實驗:創建Brushes以及填充圖形
Brush對象用於填充圖形
SolidBrush: 純色畫刷
HatchBrush: 圖案畫刷
◦–Windows提供的典型圖案填充圖形
TextureBrush: 紋理畫刷
LinearGradientBrush: 漸變畫刷
◦–用平滑過渡的顏色來填充一個圖形
PathGradientBrush: 路徑漸變畫刷
◦–基於某一路徑,用復雜的混合色漸變進行填充
使用gradient brush實現漸變的顏色
使用path gradient brush實現用漸變的顏色填充圖形,彩色漸變是從路徑的中點到路徑的外邊界邊緣的平滑的彩色漸變.
繪制文本
◦需要Brush對象及Font對象
◦調用Graphics對象的DrawString方法繪制文本
繪制文本技巧
◦指定文本繪制范圍:提供矩形對象
◦控制換行:Environment.NewLine
◦繪制豎向文本:使用StringFormat對象
GraphicsPath
此類封裝了一系列相連接的直線、曲線、圓弧等圍成的圖形。
可通過Add系列方法來構造一個路徑;通過CloseFigure方法自動完成路徑的設置;通過Graphics的DrawPath方法來繪制路徑,FillPath方法來填充路徑
區域(Region)
指繪圖表面的一部分
可以使用Rectangle或GraphicsPath對象來構造一個區域
使用FillRegion對區域進行填充
使用MakeInfinite將一個區域轉換為無限區域
可對區域進行類似於集合的操作
可以使用Region對象得到特殊形狀的窗體
屏幕坐標系
平移:
g.TranslateTransform(100, 75)
旋轉
g.RotateTransform(45)
縮放:坐標系的縮放是指坐標原點不變,但單位長度所占的像素數目有變化;
'水平放大兩倍,垂直放大三倍
g.ScaleTransform(2.0F, 3.0F)
Bitmap
◦–位圖是位的數組,它指定了像素矩陣中各像素的顏色。
圖形文件格式的類型
◦–BMP, GIF, JPEG, EXIF, PNG, TIFF
旋轉、傾斜及折射圖像
◦–使用DrawImage方法並通過指定左上角、右上角、左下角的目標坐標來實現
通過調用Image對象的GetThumbnailImage方法創建縮略圖
在圖像上輸出字
獲取圖像對象所在容器的Graphics對象g,然后,調用g的DrawString;
或是獲取圖像本身的Graphics對象,並調用DrawString方法。
創建圖像特效
圖像特效是依靠對圖像的像素點直接進行操作實現的。並可對像素進行數學變換。
其方法是
◦–調用GetPixel得到點的顏色,然后,進行相應處理后,再用SetPixel寫回到圖像中。