808
社区成员




'在模块中写如下代码:
'***************************************************************************************************
Public Type ImageSize
Width As Long
Height As Long
End Type
Public Function GetImageSize(sFileName As String) As ImageSize
On Error Resume Next
Dim bTemp(3) As Byte, lPos As Long, lFlen As Long
Open sFileName For Binary As #1
lFlen = LOF(1)
Get #1, 1, bTemp()
If bTemp(0) = &H89 And bTemp(1) = &H50 And bTemp(2) = &H4E And bTemp(3) = &H47 Or bTemp(0) = &H42 And bTemp(1) = &H4D Then
Debug.Print "\PNG OR BMP\ "
Get #1, 19, bTemp
GetImageSize.Width = byte2long(bTemp(0), bTemp(1))
Get #1, 23, bTemp
GetImageSize.Height = byte2long(bTemp(0), bTemp(1))
End If
'JPG
If bTemp(0) = &HFF And bTemp(1) = &HD8 And bTemp(2) = &HFF Then
Debug.Print "\JPEG\ "
lPos = 4
Do
Do
Get #1, lPos, bTemp
lPos = lPos + 1
Loop Until (bTemp(0) = &HFF And bTemp(1) <> &HFF) Or lPos > lFlen
Get #1, lPos, bTemp
If bTemp(0) > = &HC0 And bTemp(0) <= &HC3 Then
Get #1, lPos + 4, bTemp
Exit Do
Else
lPos = lPos + (byte2long(bTemp(2), bTemp(1))) + 1
End If
Loop While lPos < lFlen
GetImageSize.Width = byte2long(bTemp(3), bTemp(2))
GetImageSize.Height = byte2long(bTemp(1), bTemp(0))
End If
'GIF file
If bTemp(0) = &H47 And bTemp(1) = &H49 And bTemp(2) = &H46 And bTemp(3) = &H38 Then
Debug.Print "\GIF\ "
Get #1, 7, bTemp
GetImageSize.Width = byte2long(bTemp(0), bTemp(1))
GetImageSize.Height = byte2long(bTemp(2), bTemp(3))
End If
'PSD
If bTemp(0) = &H38 And bTemp(1) = &H42 And bTemp(2) = &H50 And bTemp(3) = &H53 Then
Debug.Print "\PSD\ "
Get #1, 17, bTemp
GetImageSize.Width = byte2long(bTemp(1), bTemp(0))
Get #1, 21, bTemp
GetImageSize.Height = byte2long(bTemp(1), bTemp(0))
End If
'TIF
If bTemp(0) = &H4D And bTemp(1) = &H4D And bTemp(2) = &H0 And bTemp(3) = &H2A Then
Debug.Print "\TIF1\ "
Get #1, 31, bTemp
GetImageSize.Width = byte2long(bTemp(1), bTemp(0))
Get #1, 43, bTemp
GetImageSize.Height = byte2long(bTemp(1), bTemp(0))
End If
If bTemp(0) = &H49 And bTemp(1) = &H49 And bTemp(2) = &H2A And bTemp(3) = &H0 Then
Get #1, 5, bTemp
If bTemp(0) = &H8 And bTemp(1) = &H0 And bTemp(2) = &H0 And bTemp(3) = &H0 Then
'TIF
Debug.Print "\TIF2-1\ "
Get #1, 31, bTemp
GetImageSize.Width = byte2long(bTemp(0), bTemp(1))
Get #1, 43, bTemp
GetImageSize.Height = byte2long(bTemp(0), bTemp(1))
Else
'TIF
Debug.Print "\TIF2-2\ "
lPos = byte2long(bTemp(0), bTemp(1)) + byte2long(bTemp(2), bTemp(3)) * 65536 + 11
Get #1, lPos, bTemp
GetImageSize.Width = byte2long(bTemp(0), bTemp(1))
Get #1, lPos + 12, bTemp
GetImageSize.Height = byte2long(bTemp(0), bTemp(1))
End If
End If
Close #1
End Function
Public Function byte2long(ByVal lsb As Long, ByVal msb As Long) As Long
byte2long = lsb + (msb * 256)
End Function
'******************************************************************************************************
'窗口中的代码:
Private Sub Command1_Click()
Dim a As ImageSize
a = GetImageSize( "D:\2.jpg ")
Text1.Text= a.Height & "像素 "
Text2.Text = a.Width & "像素 "
End Sub
Private Sub Form_Load()
Dim p As Picture, x, y
Set p = LoadPicture("c:\1.jpg")
'ScaleMode = 3 '可以加这句,就不用除15了,根据需要选。
x = ScaleX(p.Width) \ 15
y = ScaleY(p.Height) \ 15
Debug.Print x, y
Set p = Nothing
End Sub