查看: 36  |  回复: 0
  VB6 代码管家-取图片尺寸大小(JPG/GIF/BMP)
楼主
发表于 2024年12月8日 21:51
'代码出处:http://www.codefans.net/articles/1162.shtml

Private Type ImageSize
    Width As Long
    Height As Long
End Type

Private Function GetImageSize(sFileName As String) As ImageSize
    On Error Resume Next
    Dim iFN As Integer
    Dim bTemp(3) As Byte
    Dim lFlen As Long
    Dim lPos As Long
    Dim bHmsb As Byte
    Dim bHlsb As Byte
    Dim bWmsb As Byte
    Dim bWlsb As Byte
    Dim bBuf(7) As Byte
    Dim bDone As Byte
    Dim iCount As Integer
    lFlen = FileLen(sFileName)
    iFN = FreeFile
    Open sFileName For Binary As iFN
    Get #iFN, 1, bTemp()
    'PNG 文件
    If bTemp(0) = &H89 And bTemp(1) = &H50 And bTemp(2) = &H4E And bTemp(3) = &H47 Then
        Get #iFN, 19, bWmsb
        Get #iFN, 20, bWlsb
        Get #iFN, 23, bHmsb
        Get #iFN, 24, bHlsb
        GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
        GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
    End If
    'GIF 文件
    If bTemp(0) = &H47 And bTemp(1) = &H49 And bTemp(2) = &H46 And bTemp(3) = &H38 Then
        Get #iFN, 7, bWlsb
        Get #iFN, 8, bWmsb
        Get #iFN, 9, bHlsb
        Get #iFN, 10, bHmsb
        GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
        GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
    End If
    'JPEG 文件
    If bTemp(0) = &HFF And bTemp(1) = &HD8 And bTemp(2) = &HFF Then
        Debug.Print "JPEG"
        lPos = 3
        Do
            Do
                Get #iFN, lPos, bBuf(1)
                Get #iFN, lPos + 1, bBuf(2)
                lPos = lPos + 1
            Loop Until (bBuf(1) = &HFF And bBuf(2) <> &HFF) Or lPos > lFlen
            For iCount = 0 To 7
                Get #iFN, lPos + iCount, bBuf(iCount)
            Next iCount
            If bBuf(0) >= &HC0 And bBuf(0) <= &HC3 Then
                bHmsb = bBuf(4)
                bHlsb = bBuf(5)
                bWmsb = bBuf(6)
                bWlsb = bBuf(7)
                bDone = 1
            Else
                lPos = lPos + (CombineBytes(bBuf(2), bBuf(1))) + 1
            End If
        Loop While lPos < lFlen And bDone = 0
        GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
        GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
    End If
    'BMP 文件
    If bTemp(0) = &H42 And bTemp(1) = &H4D Then
        Get #iFN, 19, bWlsb
        Get #iFN, 20, bWmsb
        Get #iFN, 23, bHlsb
        Get #iFN, 24, bHmsb
        GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
        GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
    End If
    Close iFN
End Function

Private Function CombineBytes(lsb As Byte, msb As Byte) As Long
    CombineBytes = CLng(lsb + (msb * 256)) '把十六进制数换成十进制
End Function

Private Sub Form_Load() '调用方法
    Dim size As ImageSize
    size = GetImageSize("C:\Users\Administrator\Desktop\1.jpg")
    MsgBox "宽=" & size.Width & " 高=" & size.Height
End Sub


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com