Referenz - BLOAD
Syntax: BLOAD (Dateiname[, Adresse][, pal ])
Typ: Funktion
Kategorie: Dateien
BLOAD lädt einen Block binärer Daten aus einer Datei. Der Befehl wird typischerweise benutzt, um Bilder aus externen Dateien (etwa BMPs) zu laden.
- 'Dateiname' ist der Name der Datei, aus der geladen werden soll.
- 'Adresse' ist ein ANY PTR auf die Adresse, auf welche die Daten geladen werden sollen. Wenn 'Adresse' ausgelassen oder mit 0 (null) angegeben wird, schreibt BLOAD die Daten auf die aktuelle Bildschirmseite.
- 'pal' ist die Adresse, auf welche die Farbpalette geladen werden soll. Wenn 'Adresse' ausgelassen oder mit 0 (null) angegeben wird, schreibt BLOAD die Daten in die aktuelle Farbpalette.
- Der Rückgabewert ist ein INTEGER mit einer der FreeBASIC-Fehlernummern. Mögliche Fehlermeldungen sind
- 1 (Illegal function call): Die geladenen Daten können nicht verarbeitet werden.
- 2 (File not found): Die Datei konnte nicht gefunden werden.
- 3 (File I/O error): Die Datei besitzt keinen unterstützten Typ oder ein allgemeiner Lesefehler ist aufgetreten.
BLOAD kann dazu verwendet werden, einen Block binärer Daten zu laden. Ebenso ist es möglich, einen gespeicherten Bildschirmausschnitt direkt auf den Bildschirm zu laden: Wenn Sie 'Adresse' auslassen oder 0 angeben, werden die Daten als Pixel behandelt und auf die aktuelle Bildschirmseite geladen.
BLOAD unterstützt folgende Dateiformate:
- Altes QB BSAVE-Format (Dateien, die mit QBs BSAVE gespeichert wurden), beginnend mit &hFD
- Neues FreeBASIC BSAVE-Format (Dateien, die mit FreeBASICs BSAVE gespeichert wurden), beginnend mit &hFE
- Diverse (Windows-)Bitmaps (.BMP), beginnend mit "BM", s.u.
Bilder werden beim Laden in ein FreeBASIC-kompatibles Bildformat konvertiert.
Achtung: Auch wenn BLOAD zum Laden eines Binärdatenblocks verwendet wird, muss die gfxlib eingebunden sein, z. B. durch die Verwendung von SCREENRES.
Das BSAVE-Format von QB erlaubt bis zu 64KB große Binärdaten. Es besitzt einen 7-Byte großen Header, dem die Rohdaten folgen:
Offset | Länge | Daten |
---|---|---|
1 | 1 Byte | ID (= &hFD) |
2 | 2 Bytes | Datensegment (DS) zum Speicherzeitpunkt (von FreeBASIC ignoriert) |
4 | 2 Bytes | Offset im Datensegment zum Speicherzeitpunkt (von FreeBASIC ignoriert) |
6 | 2 Bytes | Länge der Binärdaten |
Das BSAVE-Format von FreeBASIC erlaubt bis zu 4GB große Binärdaten. Es besitzt einen 5-Byte großen Header, dem die Rohdaten folgen:
Offset | Länge | Daten |
---|---|---|
1 | 1 Byte | ID (= &hFE) |
2 | 4 Bytes | Länge der Binärdaten |
Es ist auch möglich, mit BLOAD Bitmaps zu laden. Dazu muss lediglich als Dateiname eine Bitmapdatei (z. B. "MeinBild.bmp") angegeben werden. BLOAD erkennt anhand des Dateianfangs (magic number), dass es sich um eine Bitmap-Grafik handelt. Es werden palette-indizierte BMPs (8 Bit und weniger) und Truecolor-BMPs (15, 16, 24 oder 32 Bit) unterstützt. Die Palette von BMPs mit 8Bit oder weniger wird entweder an die durch den Parameter 'pal' festgelegte Adresse geladen oder, wenn dieser 0 oder unspezifiziert ist, als aktuelle Farbpalette eingesetzt.
Achten Sie beim Laden von Bildern darauf, dass diese die gleiche Farbtiefe aufweisen wie der gewählte Bildschirmmodus (siehe SCREENRES). Laden Sie beispielsweise kein 24-Bit-BMP in ein Grafikfenster mit Farbtiefe 4 Bit. Wenn Bilder in einem der BSAVE-Formate geladen werden sollen, müssen diese im selben Bildschirmmodus mittels BSAVE erstellt worden sein.
Wird die zu ladende Datei nicht gefunden oder ihr Format nicht unterstützt (dies ist z. B. bei RLE-komprimierten Bitmaps der Fall), verursacht BLOAD einen Laufzeitfehler. Ebenso wird ein Fehler verursacht, wenn versucht wird, eine Truecolor-BMP in einem palette-indizierten Bildschirmmodus zu laden.
Beispiel:
Ein 48x48 Pixel großes Bild in einen Puffer laden und auf dem Bildschirm ausgeben. Das Beispiel benötigt zur korrekten Ausführung ein 48x48 Pixel großes Bild namens "picture.bmp".
SCREENRES 640, 480, 32
Dim As Any Ptr bild
bild = ImageCreate(48, 48) 'Bildpuffer der Groesse 48x48 anlegen
BLoad "picture.bmp", bild 'Bilddatei in den Puffer laden
PUT (10, 10), bild 'Bildpuffer auf den Bildschirm zeichnen
ImageDestroy (bild) 'Bildpuffer wieder loeschen
Sleep 'Auf Tastendruck warten
End
Um Speicherlecks zu vermeiden, sollte man erstellte Bildpuffer nach der Nutzung stets wieder löschen. Dies geschieht mit IMAGEDESTROY. Es empfiehlt sich weiterhin, den Pointer 'bild' auf Null zu setzen, um Zugriffsfehler zu vermeiden. Dies ist aber nicht zwingend nötig.
Die Methode, ein Bild in ein selbst erstelltes Byte-Array zu laden, ist veraltet und wird hier nur noch zu Dokumentationszwecken aufgeführt:
SCREENRES 640, 480, 32
DIM garray(4 * (48 * 48) + 4) AS Byte
BLOAD "picture.bmp", @garray(0)
PUT (10, 10), garray(0)
SLEEP
Unterschiede zu QB:
- BLOAD unterstützt auch das Laden von Datenblöcken größer als 64KB sowie von Bitmaps.
- BLOAD kann in FreeBASIC auch als Funktion eingesetzt werden.
Unterschiede zu früheren Versionen von FreeBASIC:
- Die Adresse der Farbpalette kann seit FreeBASIC v0.20.0 angegeben werden.
- Die Möglichkeit, BMPs höherer Farbtiefen als 8 Bit zu laden, existiert seit v0.14.
- Die Möglichkeit, Bitmaps zu laden, existiert seit FreeBASIC v0.12.
Siehe auch:
BSAVE, PUT (Grafik), GET (Grafik), IMAGECREATE, IMAGEDESTROY, Dateien (Files)
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|