Rubrik: Grafik und Font · Bilder & Icons | VB-Versionen: VB4, VB5, VB6 | 01.09.03 |
Bildgröße von Bitmap-Dateien Ermitteln der Bildgröße einer Bitmap, ohne sie zu laden oder selbst anzugeben! | ||
Autor: Patrick Dinklage | Bewertung: | Views: 16.026 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Dieser Tipp erklärt, wie man die Größe einer BMP-Datei ermitteln kann, ohne das Bild zu laden oder die Größe selbstanzugeben. Ich habe diese Funktion geschrieben, um mir das Laden von Surfaces in DirectDraw zu vereinfachen. Wenn Sie bei vielen Bitmaps die Größen nicht einzeln angeben und die verlängerte Ladezeit durch das Laden des Bildes in eine PictureBox vermeiden wollen, ist diese Funktion sehr hilfreich.
Was tut die Funktion genau?
Nun, sie liest die Bildgröße einfach aus der Bitmap-Datei!
Dies funktioniert folgendermaßen:
Zuerst werden Variablen für Breite und Höhe deklariert:
Dim nWidth As Integer Dim nHeight As Integer
Als Nächstes wird die Bitmap-Datei im Binary-Modus geöffnet, so dass eingelesene Hex-Code direkt in das Integer-Format konvertiert wird:
Dim F F = FreeFile Open FileName For Binary As #F
Nun wird die Get-Methode benutzt, um die beiden Hex-Codes für Breite und Höhe aus der Datei zu lesen:
Get [Datei-Nummer], [Daten-Offset], [Zielvariable]
Die Dateinummer ist in unserem Beispiel F, die Zielvariable ist nWidth bzw. nHeight. Der Daten-Offset beschreibt die Position des Bytes in der Datei, an dem die einzulesenen Daten beginnen. In (glücklicherweise) jeder Bitmap-Datei befinden sich die Daten für die Breite an Position 18 und für dieHöhe an Position 22.
Nun lesen wir die Daten ein und schließen die Datei wieder:
Get #F, 19, nWidth Get #F, 23, nWidth Close #F
Eine Frage stellt sich noch: Warum wurden die Offsets auf 19 und 23 statt auf 18 und 22 gestellt?
Ganz einfach: In Visual Basic ist der erste Offset 1 statt 0 (warum auch immer), deshalb muss zu den Offsets immer 1 hinzugefügt werden.
Hier nochmals der gesamte Code in Form einer universellen Funktion:
' Bitmap-Größe auslesen Public Sub GetBitmapSize(ByVal sFile As String, _ nWidth As Integer, nHeight As Integer) Dim F As Integer F = FreeFile Open sFile For Binary As #F Get #F, 19, nWidth Get #F, 23, nHeight Close #F End Sub