Bilder (BMP, GIF, JPG, PCX) laden, anzeigen und speichern.


Eine der häufigsten Fragen die von Anfängern gestellt wird, ist: "Wie kann ich in QB Bilder laden, anzeigen und speichern?".

Wichtig ist zunächst einmal der Grafikmodus in dem das Bild angezeigt werden soll und in diesem Zusammenhang natürlich auch welche Größe und Farbtiefe das Bild hat. Ohne eine Library gibt es in QB eigentlich nur 2 Modis die geeignet sind um Bilder anzuzeigen. Das ist zum Einen der SCREEN 13 um Bilder anzuzeigen die 320x200x256 sind und zum Anderen der SCREEN 12 für Bilder mit 640x480x16.

Bilder mit 320x200x256Farben - Speicherabzug im SCREEN 13 (Autor: East-Power-Soft)

In QB ist es möglich "Speicherbereiche in eine Datei auszulagern" - wie es in der Anleitung so schön heißt. Dazu wird der Befehl BSAVE verwendet (entsprechend BLOAD zum Laden). Allerdings ist über BSAVE nur das Abspeichern von maximal 65.535 Bytes möglich. Fangen wir also mal an zu rechnen. Im SCREEN 13 haben wir 320x200 Bildpunkte bei 256 Farben. Das ergibt (320 * 200 = ) 64.000 Byte's. Somit ist es im SCREEN 13 möglich, mit Hilfe dieser Befehle den Bildschirminhalt in eine Datei zu schreiben. Aber wo ist der Bildschirminhalt? Der liegt im so genannten Videospeicher ab Adresse A000:0000. Beispiel

Bilder mit 640x480x16Farben - Speicherabzug im SCREEN 12 (Autor: East-Power-Soft)

Während im SCREEN 13 ein ganzes Byte genutzt wurde, um den Farbwert bzw. Stift zu speichern (256 Farben), wird im SCREEN 12 ein wenig anders verfahren. Schließlich gibt es hier ja nur 16 Farben. Um 16 Farben bzw. Stifte speichern zu können benötigt man 4 Bit's. Da ein Byte aus 8 Bit besteht, kann man also mit einem Byte zwei Pixel abspeichern. Im SCREEN 12 haben wir 640x480 Pixel. Nach Adam Ries macht das also (640 * 480 : 2 = ) 153.600 Byte. Tja, das ist dann wohl irgendwie zu viel für BSAVE und BLOAD?! Den Bildschirminhalt in einer Datei unterzubringen fällt somit erst einmal flach. Trotzdem können wir den Bildschirminhalt mit einem Trick zumindest in 4 Dateien abspeichern. Beispiel

Bilder mit 640x480x16 - Komprimierter Speicherabzug im SCREEN 12 (Autor: East-Power-Soft)

Als ich das erste Mal vor dem Problem stand ein Bild im SCREEN 12 zu speichern bzw. zu laden missfiel mir der Gedanke mehrere Dateien dafür zu verwenden so sehr, daß ich beschloss mir etwas anderes auszudenken. Da ich schon immer der Meinung war: "alles ist machbar - man muß nur dahinter kommen wie", schlug ich mir mehrere Nächte um die Ohren, bis mir die rettende Idee kam. Ich erinnerte mich daran was wir in der guten alten 8-Bit-Zeit unternommen haben um Speicherplatz auf Disketten zu sparen. Wir komprimierten damals so ziemlich alles. Da SCREEN-12-Bilder, auf Grund dessen, daß sie mit nur 16 Farben erstellt sind, nicht unbedingt kunterbunt sind, sondern viele großflächige Bereiche enthalten, lag es nahe die Bilder zu packen. Die einfachste Möglichkeit ein Bild zu packen ist, sich zu merken wie viele gleichfarbige Pixel hintereinander kommen. Man speichert dann lediglich die Anzahl der Pixel und welche Farbe sie haben. Dieses Verfahren nennt man RLE (Run Length Encoded). Unter Umständen kann man so ein Bild auf weniger als ein Viertel seiner Ursprungsgröße komprimieren. In unserem Fall heißt das, den gesamten SCREEN 12 in eine Datei zu packen. Ganz nebenbei hat man auf diese Art und Weise auch eine ganz brauchbare Verschlüsselung seiner Daten und es geht so schnell, daß auch auf einem alten 386er kaum Ladezeiten auftreten. Beispiel

Bilder in ausführbare Programme umwandeln (Autor: Mecki)

Eine sehr einfach zu handhabende Möglichkeit Bilder in QB zu nutzen kommt von Mecki. Er hat einen Tool geschrieben, mit dessen Hilfe es möglich ist, ein Bild direkt in eine QB-Datei umzuwandeln. Dieses QB-Programm lädt dann nicht etwa das Bild, nein, das QB-Programm ist das Bild. Das beste daran ist, mal abgesehen davon das es unglaublich einfach ist, daß die erzeugte Datei kleiner ist als das Originalbild - also zusätzlich komprimiert ist. Zusammengefasst heißt das: einfach in der Handhabung, sichere Funktionsweise und einfach genial - von solchen Tools sollte es mehr geben. Download

Originalformate laden und speichern (Autoren: siehe unten)

Eine meist etwas langsamere, aber dafür etwas einfachere Methode, ist Originalformate zu laden. D.h. Bilder wie BMP, PCX, GIF, JPG, und wie sie nicht alle heißen direkt zu laden, ohne sie in irgendetwas zu konvertieren. Eine BMP-Laderoutine ist im RLE-Beispiel enthalten. Diese lädt BMP-Bilder mit 640x480x16. Aber auch zu den anderen Formaten gibt es diverse Routinen:

Link & Typ: Autor: Beschreibung:
BMP Viewer Autor: unbekannt; lädt 4, 8 und 24-Bit BMP-Bilder (24-Bit werden in Grau-Stufen angezeigt)
BMP Viewer Autor: East-Power-Soft; lädt 4-Bit BMP-Bilder
BMP Viewer Autor: East-Power-Soft; lädt 8-Bit BMP-Bilder
PCX Viewer Autor: Yousuf Philips; lädt 8-Bit PCX-Bilder
GIF Viewer Autor: unbekannt; lädt 8-Bit GIF-Bilder
JPG Viewer Autor: Antoni Gual; lädt JPG-Bilder in allen Formaten!!!
ICO Viewer Autor: Yosouf Philips; lädt 4, 8 und 24-Bit Icons (24-Bit werden in Grau-Stufen angezeigt)
BMP Saver Autor: East-Power-Soft; speichert eine 4-Bit BMP-Datei. Eignet sich gut um Screenshots zu machen.