1.其他创建方式
我们之前创建Graphics都是从DC创建的,不过GDI+还有几种创建画布方法,且很重要哦
(1)hWnd(FromHWND)
如名,从句柄创建。本人不怎么用这个。
以下代码从窗体句柄创建Graphics
'Dim Graphics As Long GdipCreateFromHWND Me .hWnd, Graphics
|
(2)Image/Bitmap(FromImage) [Important]
某些人用.Net发现.Net有神奇的从图片创建(Graphics.FromImage)的办法,这个办法主要用来保存为图片用。那么FromImage的原型是什么呢?其实它的名字很囧:GdipGetImageGraphicsContext。它可以从Image创建Graphics,当然从Bitmap也可以。
以下代码是从img创建Graphics
'Dim img As Long, Graphics As Long 'GdipLoadImageFromFile StrPtr("C:1.png"), img GdipGetImageGraphicsContext Graphics, img |
2.清除画布内容
对于有透明通道的绘制,每次绘制都必须擦除前面所画,否则会透明重叠……
办法1是自己FillRectangle一下,不过GDI+已经给我们更加直接的办法了:
以下代码用白色清除Graphics上内容
Private Declare Function GdipGraphicsClear Lib "gdiplus" (ByVal graphics As Long, ByVal lColor As Long) As GpStatus
'Dim Graphics As Long GdipGraphicsClear Graphics, &HFFFFFFFF |
3.整体旋转
这个是整体的旋转,就是把画布旋转了……所以说~~如果只有一张图片那么旋转后图片边缘就是锯齿的(因为画布的边缘没有消除锯齿的功能)
以下代码将Graphics旋转20度
'Dim Graphics As Long GdipRotateWorldTransform Graphics, 20, MatrixOrderAppend |
4.整体平移
这个也是整体的,整体的平移一个量,是增量,相对量,不是绝对量。
以下代码将Graphics向右,向下平移10px,20px
Private Declare Function GdipTranslateWorldTransform Lib "gdiplus" (ByVal graphics As Long, ByVal dx As Single, ByVal dy As Single, ByVal order As MatrixOrder) As GpStatus
Public Enum MatrixOrder
MatrixOrderPrepend = 0
MatrixOrderAppend = 1
End Enum
'Dim Graphics As Long GdipTranslateWorldTransform Graphics, 10, 20, MatrixOrderAppend |
5.剪辑(遮掩层)
剪辑区域设置以后,绘制的内容就会仅限于这个区域内;超出的部分将被无视掉。但是原来的内容还在原来地方,不受剪辑区域影响。
以下代码设置一块剪辑区域,X=10 Y=20 Width=100 Height=100 ( (10,20) – (110,120) )
'Dim Graphics As Long GdipSetClipRectI Graphics, 10, 20, 100, 100, CombineModeReplace |
设置了当然还有取消——