|
Im Artikel "Hoch
mal breit" zeigen wir Ihnen, wie Sie die Größe
einer in ein Picture-Objekt
geladenen Bitmap ermitteln können. Dagegen können Sie mittels der
folgenden Funktionen die Größe einer Bitmap (Formate BMP und JPEG)
in einer Datei ermitteln, ohne die Datei erst in ein Picture-Objekt
laden zu müssen. Sie übergeben im Parameter FilePath den
Dateipfad. Enthält die Datei ein Bitmap eines der beiden Formate,
gibt die Funktion True zurück und übermittelt Ihnen die Breite und
Höhe der Bitmap in den Rückgabe-Parametern Width und Height.
Public Function SizeBMP(FilePath As String, Width As Long, _
Height As Long) As Boolean
Dim nFNr As Long
Dim nWidth As Long
Dim nHeight As Long
Dim nDummy As String
nFNr = FreeFile
Open FilePath For Binary Access Read As #nFNr
nDummy = Input$(18, nFNr)
If Left$(nDummy, 2) = "BM" Then
Get #nFNr, , nWidth
Get #nFNr, , nHeight
SizeBMP = True
End If
Close #nFNr
Width = nWidth
Height = nHeight
End Function
Public Function SizeJPG(FilePath As String, Width As Long, _
Height As Long) As Boolean
Dim nFNr As Long
Dim nFlag As Integer
Dim nDummy As String
Dim nOffset As Long
Dim nValue As String
Dim nWidth As Long
Dim nHeight As Long
nFNr = FreeFile
Open FilePath For Binary Access Read As #nFNr
If Input$(1, #nFNr) <> Chr$(255) Then
Close #nFNr
Exit Function
End If
nFlag = Asc(Input$(1, #nFNr))
If nFlag <> &HD8 Then
Close #nFNr
Exit Function
End If
nDummy = Input$(2, #nFNr)
Do
nOffset = Asc(Input$(1, #nFNr)) * 256& + _
Asc(Input$(1, #nFNr))
nValue = Input$(nOffset - 2, #nFNr)
If (nFlag = &HC0) Or (nFlag = &HC2) Then
nWidth = Asc(Mid$(nValue, 4, 1))
nWidth = nWidth * 256 + Asc(Mid$(nValue, 5, 1))
nHeight = Asc(Mid$(nValue, 2, 1))
nHeight = nHeight * 256 + Asc(Mid$(nValue, 3, 1))
End If
If Input$(1, #nFNr) <> Chr$(255) Then
Exit Do
End If
nFlag = Asc(Input$(1, #nFNr))
Loop While nFlag <> &HD9
Close #nFNr
Width = nWidth
Height = nHeight
SizeJPG = True
End Function
Auf eine entsprechende Funktion für das GIF-Format haben wir
verzichtet, da wir kein Bedürfnis haben, es auf
Lizenzstreitigkeiten mit Unisys anzulegen, und auch Sie nicht in
diese Verlegenheit zu bringen.
Im Prinzip können Sie zum Aufruf einer der beiden obenstehenden
Funktionen das in der Datei enthaltene Bitmap-Format anhand der
Dateierweiterung bestimmen. Allzu sicher ist das allerdings nicht,
da ein Anwender (oder auch ein schludrig arbeitendes Grafik(-Konvertierungs)-Programm
die Dateierweiterung ja freizügig ändern bzw. vergeben kann. Da
beide Funktionen intern das Bitmap-Format prüfen, können Sie auch
einfach die folgende Funktion verwenden, die zuerst die Funktion
für das BMP-Format aufruft, und bei einem Fehlschlag auch noch die
Funktion für das JPEG-Format probiert. Diese allgemeinere Funktion
gibt Ihnen im Erfolgsfalle zusätzlich im Rückgabe-Parameter
BitmapFormat die Kennung des erkannten Formats der Bitmap zurück -
entweder BMP oder JPG.
Public Function SizeAny(FilePath As String, _
BitmapFormat As String, Width As Long, Height As Long) _
As Boolean
Dim nRet As Boolean
Dim nWidth As Long
Dim nHeight As Long
nRet = SizeBMP(FilePath, nWidth, nHeight)
If nRet Then
BitmapFormat = "BMP"
Width = nWidth
Height = nHeight
SizeAny = True
Else
nRet = SizeJPG(FilePath, nWidth, nHeight)
If nRet Then
BitmapFormat = "JPG"
Width = nWidth
Height = nHeight
SizeAny = True
End If
End If
End Function
|