版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://vistaswx.blogbus.com/logs/45641502.html
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上内容
'Dim Graphics As Long GdipGraphicsClear Graphics, &HFFFFFFFF
3.整体旋转
这个是整体的旋转,就是把画布旋转了……所以说~~如果只有一张图片那么旋转后图片边缘就是锯齿的(因为画布的边缘没有消除锯齿的功能)
以下代码将Graphics旋转20度
'Dim Graphics As Long GdipRotateWorldTransform Graphics, 20, MatrixOrderAppend
4.整体平移
这个也是整体的,整体的平移一个量,是增量,相对量,不是绝对量。
以下代码将Graphics向右,向下平移10px,20px
'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
设置了当然还有取消——
'Dim Graphics As Long 'GdipSetClipRectI Graphics, 10, 20, 100, 100, CombineModeReplace GdipResetClip Graphics






评论