• VB6之GDI+加载PNG图片


    原生的VB6不支持PNG个图片,因为刚有VB的时候还没有PNG的概念呢。不过,利用GDI+加载解析个PNG简直是砍瓜切菜般简单。

    GDI+的模块是我在网上下载的,地址应该是:http://vistaswx.com/blog/article/gdip-tutorial-6-image

    上代码:

     1 'code by lichmama from cnblogs.com
     2 '@vb6.0 gdi+ png
     3 Private Sub DrawPng(ByVal pngfile As String, _
     4     Optional Left As Long = 0&, _
     5     Optional Top As Long = 0&, _
     6     Optional zoom As Single = 1#)
     7     
     8     Dim Graphic As Long
     9     Dim Image As Long
    10     Dim imgWidth As Long
    11     Dim imgHeight As Long
    12     
    13     Call GdipCreateFromHDC(Me.hDC, Graphic)
    14     Call GdipSetSmoothingMode(Graphic, SmoothingModeAntiAlias)
    15     Call GdipLoadImageFromFile(StrPtr(pngfile), Image)
    16     Call GdipGetImageWidth(Image, imgWidth)
    17     Call GdipGetImageHeight(Image, imgHeight)
    18     Call GdipDrawImageRect(Graphic, Image, 10& + Left, 10& + Top, imgWidth * zoom, imgHeight * zoom)
    19     
    20     Call GdipDisposeImage(Image)
    21     Call GdipDeleteGraphics(Graphic)
    22 End Sub
    23 
    24 Private Sub Command1_Click()
    25     Call DrawPng("D:迅雷下载
    io-2-icons
    io-2-tulio-icon-2.png", -70&, -30&)
    26     Call DrawPng("D:迅雷下载
    io-2-icons
    io-2-linda-icon-2.png", 300&)
    27     Call DrawPng("D:迅雷下载
    io-2-icons
    io-2-logo.png", 250, 250&, 0.5)
    28     Call DrawPng("D:迅雷下载
    io-2-icons
    io-2-kids-icon.png", 225&, 220&, 0.25)
    29     Call DrawPng("D:迅雷下载
    io-2-icons
    io-2-nico-&-pedro-icon.png", 350&, 200&, 0.25)
    30     Call DrawPng("D:迅雷下载
    io-2-icons
    io-2-luiz-icon.png", 625&, 300&, 0.25)
    31 End Sub
    32 
    33 Private Sub Form_Load()
    34     Call InitGDIPlus
    35 End Sub
    36 
    37 Private Sub Form_Unload(Cancel As Integer)
    38     Call TerminateGDIPlus
    39 End Sub

    贴张图:

    从资源文件加载PNG:

    Private Function GdipCreateImageFromStream(ByVal resid As Integer, _
        ByVal restype As String) As Long
    
        Dim Image As Long
        Dim ResData() As Byte
        Dim IStream As Object
        Dim hGlobal As Long
        Dim pMem As Long
        
        ResData = LoadResData(resid, restype)
        hGlobal = GlobalAlloc(GMEM_MOVEABLE, UBound(ResData) + 1)
        pMem = GlobalLock(hGlobal)
        If pMem = 0 Then
            Debug.Print "Global Alloc Failed."
            Erase ResData
            Exit Function
        End If
        Call RtlMoveMemory(ByVal pMem, ResData(0), UBound(ResData) + 1)
        Call GlobalUnlock(hGlobal)
        Call CreateStreamOnHGlobal(hGlobal, False, IStream)
        Call GdipLoadImageFromStream(IStream, Image)
    
        Set IStream = Nothing
        Call GlobalFree(hGlobal)
        GdipCreateImageFromStream = Image
    End Function
    Private Sub Command1_Click()
        Dim Graphics As Long
        Dim Image As Long
        
        Call GdipCreateFromHDC(Me.hDC, Graphics)
        Call GdipSetSmoothingMode(Graphics, SmoothingModeAntiAlias)
        '调用方式如下
        Image = GdipCreateImageFromStream(101, "PNG")
        Call GdipDrawImage(Graphics, Image, 0&, 0&)
        
        Call GdipDisposeImage(Image)
        Call GdipDeleteGraphics(Graphics)
    End Sub

    贴张图:

  • 相关阅读:
    c++引用(reference)
    c++ 三目运算符功能增强
    C++ “新增”bool类型关键字
    C++ struct
    C++命名空间(namespace)
    基于python 实现KNN 算法
    Chrome 快捷键使用
    WOE(weight of evidence, 证据权重)
    python 命令运行环境下 ModuleNotFoundError: No module named 'Test'
    基于python 信用卡评分系统 的数据分析
  • 原文地址:https://www.cnblogs.com/lichmama/p/3863370.html
Copyright © 2020-2023  润新知