<<  VB6 GDI+ 入门教程[5] 基础绘图小结|VB模拟Windows7任务栏 编程可行性分析  >>
    VB6 GDI+ 入门教程[6] 图片 - [Visual Basic]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://vistaswx.blogbus.com/logs/41225905.html

    VB自己的绘图语句都需要用LoadPicture载入图片,同样,GDI+中也需要。

     

    1.载入(初始化)图片资源

    (1)来自文件:GdipLoadImageFromFile

    我们先来看看这个最简单基本的载入图片来自文件(只能看 不能运行 呵呵):

    Dim img As Long, img_W As Long, img_H As Long
    
    GdipLoadImageFromFile StrPtr("C:\TestImage.png"), img
    GdipGetImageWidth img, img_W 
    GdipGetImageHeight img, img_H
    'GdipDisposeImage img

    当然 这里面载入长宽是可选的。

    最后呢 别忘记释放Image,否则内存突然没了可不要找我~

    (2)来自资源文件:GdipLoadImageFromStream

    这个函数主要是用来从资源文件(RES)载入图像的,怎么载入呢?我们来看函数,函数是从Stream载入,但是我们VB6没有集成Stream对象,从RES读取出来(LoadResData)也只是返回Byte()。不过很好,OLE提供了一个函数能够将Byte()变为一个IStream对象——我们需要这个API

    Declare Sub CreateStreamOnHGlobal Lib "ole32.dll" (ByRef hGlobal As Any, ByVal fDeleteOnRelease As Long, ByRef ppstm As Any)

    示例代码:

    Dim img As Long
    Dim ResData() As Byte, IStream As Object
    
    ResData = LoadResData(101, "CUSTOM")
    CreateStreamOnHGlobal ResData(0), False, IStream
    GdipLoadImageFromStream IStream, img
    
    Set IStream = Nothing
    'GdipDisposeImage img

    2.绘制图片

    (1)GdipDrawImage(I) 不推荐使用】

    这是最普通的画法,不需要长宽设置 注意:它貌似不按原大小绘制!不推荐使用!。我们初始化GDI+省略……图片资源也省略(支持32位),来看这种GdipDrawImage(I)。(技巧:有I的记住了 坐标、长宽都是Long型 没有I的一般都是Single)

    Dim img As Long
    
    GdipLoadImageFromFile StrPtr("C:\TestImage.png"), img
    '此处请初始化GDI+以及graphics
    GdipDrawImage graphics, img, 0, 0

    (2)GdipDrawImageRect(I)【推荐】

    这是第二高级的画法,我们可以对图片的大小进行改变(拉伸)

    Dim img As Long
    
    GdipLoadImageFromFile StrPtr("C:\TestImage.png"), img
    '此处请初始化GDI+以及graphics
    GdipDrawImageRect graphics, img, 0, 0, 100, 200  '拉伸到100*200

    (3)GdipDrawImageRectRect(I)

    不要以为微软脑残了。这个可是很高级的画法。

    首先通过它我们可以画一个图的一个部分 并且同样可以改变大小(好处:我们可以把所有的图片资源综合到一个图片中)

    第二呢这个支持ImageAttribs图片“滤镜”:我们可以改变图片透明度和各种属性

    接下来来看看这个的画法:

    Dim img As Long
    
    GdipLoadImageFromFile StrPtr("C:\TestImage.png"), img
    '此处请初始化GDI+以及graphics
    GdipDrawImageRectRectI graphics, img, 20, 20, 10, 10, 0, 0, 100, 200, UnitPixel

    注意咯 第三~第六个参数是原来图片中要截取的部分;第七~第十呢则是画到哪里以及画出来多大的设置。

    (4)贴图刷

    贴图刷子 跟其它刷子一样 我们需要创建刷子 另外我们需要先初始化图片:)

    来看代码:

    Dim img As Long, textureBrush As Long
    
    GdipLoadImageFromFile StrPtr("C:\TestImage.png"), img
    '此处请初始化GDI+以及graphics
    GdipCreateTexture img, WrapModeTileFlipX, textureBrush
    GdipFillRectangle graphics, textureBrush, 0, 0, 100, 100

    贴图刷子跟其它刷子有什么区别呢?普通画法(DrawImage)支持的是拉伸,贴图刷则是平铺。另外贴图刷还要注意定位问题。因为贴图刷纹理起始点是0,0。因此不代表从任何位置画都可以画到正好的图片。

    贴个图,直观明了。

     

     

     

    那么贴图刷子中如何调整图片起始位置呢?我们可以平移图片——GdipTranslateTextureTransform。参数很简单 是平移量。(注意:这个我记得是参照之前量的,不是原图片;因此更改平移量要先Reset下:GdipResetTextureTransform)

     





    评论

  • 原来用GDIp载入PNG这么简单啊~
    vIstaswx回复ARTERIOSCLEROS说:
    肯定比gdi简单:)
    2009-06-20 17:36:57