Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Grafik und Fonts

BMP-Bilder komfortabel laden und anzeigen

Lizenz:Erster Autor:Letzte Bearbeitung:
FBPSLAdministratorSebastian 28.04.2012
Screenshot ShowBMP-Beispiel
Vergrößern
Screenshot ShowBMP-Beispiel

Dieses Code-Beispiel demonstriert, wie sich Bitmap-Bilder (BMP-Format) auf einfachem Wege in eigenen FreeBASIC-Programmen anzeigen lassen.

Um den Code in eigenen Programmen zu verwenden, muss lediglich das Unterprogramm bzw. die BefehlsreferenzeintragSUB ShowBMP in den eigenen Quelltext hineinkopiert werden. Der Aufruf des Unterprogramms erfolgt dann so, wie am Anfang des Code-Beispiels dargestellt (die drei Zeilen mit pizza.bmp usw.).

Wichtig: Damit das Code-Beispiel bei Ihnen funktioniert, müssen Sie zunächst die Beispielbilder herunterladen, die das Programm dann anzeigen soll. Sie finden die Dateien am Ende der Seite (bitte herunterscrollen). Speichern Sie die BMP-Dateien unbedingt im gleichen Verzeichnis, in dem auch Ihre BAS- und EXE-Dateien liegen.



Komplettes Code-Beispiel:

'Beispielprogramm zum komfortablen Laden und Anzeigen von BMP-/Bitmap-Bildern
'in FreeBASIC. Getestet mit FreeBASIC 0.23.0. (28.04.2012)

Declare Sub ShowBMP (ByVal x As Integer, ByVal y As Integer, Dateiname As String)


ScreenRes 800, 600, 24   'Grafikfenster der Groesse 800x600

WindowTitle "Fast Food"    'Benutzerdefinierter Titel des Fensters

Line (0,0)-(799,599), &HFFFFFF, BF  'Kompletten Bildschirm weiss malen

ShowBMP ( 50,  55, "pizza.bmp")
ShowBMP (295, 190, "hamburger-menu.bmp")
ShowBMP (560, 425, "bratwurst.bmp")

Sleep
End





'Bild aus der angegebenen Datei laden und auf dem Bildschirm an den Koordinaten (x,y) anzeigen
Sub ShowBMP (ByVal x As Integer, ByVal y As Integer, Dateiname As String)

    Dim As Integer breite, hoehe    'Abmessungen des Bildes
    Dim As Integer ff = Freefile    'Dateihandle

    Open Dateiname For Binary As #ff   'Datei oeffnen
    If (Lof(ff) < 32) Then  'Ist die Datei vielleicht viel zu kurz, als dass sie eine gueltige
                            'BMP-Datei sein koennte? Wenn ja, dann koennten wir gleich naemlich nicht
                            'die Header-Daten zu Breite und Hoehe fehlerfrei einlesen!
        Close #ff  'Wenn dies hier ausgefuehrt wird, war die Datei zu kurz und wird wieder geschlossen.
        Exit Sub   'Schliesslich Prozedur verlassen.
    End If
    Get #ff, 19, breite                'Breite aus der BMP-Datei auslesen
    Get #ff, 23, hoehe                 'Höhe aus der BMP-Datei auslesen
    Close #ff                          'Datei schliessen

    hoehe = ABS(hoehe)  'Die Höhe kann in bestimmten Fällen auch als negative Zahl
                        'gespeichert sein. Daher bilden wir zunaechst den Betrag, d.h.
                        '"schneiden" ein etwaiges Vorzeichen ab.

    'Bilder mit ungueltigen/exorbitanten Abmessungen im Header sind vermutlich
    'defekt bzw. sowieso zu gross fuer gaengige Bildschirme.
    If ((breite < 0) OR (breite > 2000) OR (hoehe > 2000)) Then Exit Sub

    'Kommentarzeichen vor der folgenden Zeile kann zu Debugging-Zwecken entfernt werden:
    'Print Dateiname & " (" & breite & "x" & hoehe & ")"

    Dim bild As Any Ptr             'Zeiger erstellen, der die Bildadresse speichert
    bild = ImageCreate(breite,hoehe)  'Berechnen und Reservieren des erforderlichen Speichers

    Bload dateiname, bild   'Bilddaten aus der Datei in den Speicher laden
    Put (x,y), bild, pset   'Das geladene Bild ab Position (x, y) im Fenster anzeigen
    If (bild <> 0) Then ImageDestroy bild  'Speicher wieder freigeben

End Sub

Die BefehlsreferenzeintragSUB ShowBMP kann im Programm mit folgenden Parametern aufgerufen werden:

ShowBMP ( XKoordinate, YKoordinate, Dateiname )

Im Folgenden der Code des Unterprogramms zum Herauskopieren (ohne Beispiel "drumherum"):

'Bild aus der angegebenen Datei laden und auf dem Bildschirm an den Koordinaten (x,y) anzeigen
Sub ShowBMP (ByVal x As Integer, ByVal y As Integer, Dateiname As String)

    Dim As Integer breite, hoehe    'Abmessungen des Bildes
    Dim As Integer ff = Freefile    'Dateihandle

    Open Dateiname For Binary As #ff   'Datei oeffnen
    If (Lof(ff) < 32) Then  'Ist die Datei vielleicht viel zu kurz, als dass sie eine gueltige
                            'BMP-Datei sein koennte? Wenn ja, dann koennten wir gleich naemlich nicht
                            'die Header-Daten zu Breite und Hoehe fehlerfrei einlesen!
        Close #ff  'Wenn dies hier ausgefuehrt wird, war die Datei zu kurz und wird wieder geschlossen.
        Exit Sub   'Schliesslich Prozedur verlassen.
    End If
    Get #ff, 19, breite                'Breite aus der BMP-Datei auslesen
    Get #ff, 23, hoehe                 'Höhe aus der BMP-Datei auslesen
    Close #ff                          'Datei schliessen

    hoehe = ABS(hoehe)  'Die Höhe kann in bestimmten Fällen auch als negative Zahl
                        'gespeichert sein. Daher bilden wir zunaechst den Betrag, d.h.
                        '"schneiden" ein etwaiges Vorzeichen ab.

    'Bilder mit ungueltigen/exorbitanten Abmessungen im Header sind vermutlich
    'defekt bzw. sowieso zu gross fuer gaengige Bildschirme.
    If ((breite < 0) OR (breite > 2000) OR (hoehe > 2000)) Then Exit Sub

    'Kommentarzeichen vor der folgenden Zeile kann zu Debugging-Zwecken entfernt werden:
    'Print Dateiname & " (" & breite & "x" & hoehe & ")"

    Dim bild As Any Ptr             'Zeiger erstellen, der die Bildadresse speichert
    bild = ImageCreate(breite,hoehe)  'Berechnen und Reservieren des erforderlichen Speichers

    Bload dateiname, bild   'Bilddaten aus der Datei in den Speicher laden
    Put (x,y), bild, pset   'Das geladene Bild ab Position (x, y) im Fenster anzeigen
    If (bild <> 0) Then ImageDestroy bild  'Speicher wieder freigeben

End Sub

Bitte beachten Sie, dass das Bild bei jedem Aufruf der SUB erneut aus der Datei, also von der Festplatte, geladen wird, wenn Sie es während der Programmausführung mehrmals anzeigen lassen. Bei performance-kritischen Anwendungen (z.B. bei Spielen) sollte das Bild stattdessen im Arbeitsspeicher verbleiben und mehrfach wiederverwendet werden, statt es immer wieder neu einzulesen.

Hinweis: Die Bilddateien, die im Beispiel oben benutzt werden, wurden von Externer Link!OpenClipart.org bezogen und stehen unter der CC0-PD-Lizenz zur Verfügung. Sie wurden vom Nutzer Externer Link!gnokii erstellt (Bsp.: Externer Link!hamburger-menu.svg). Im Folgenden können Sie alle drei Bilder als Bitmap-Dateien herunterladen:


Attachments zum Code-Beispiel
Bilddateibratwurst.bmpBeispielbild bratwurst.bmpAdministratorSebastian28.04.12
Bilddateipizza.bmpBeispielbild pizza.bmpAdministratorSebastian28.04.12
Bilddateihamburger-menu.bmpBeispielbild hamburger-menu.bmpAdministratorSebastian28.04.12

Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 28.04.2012 von AdministratorSebastian angelegt.
  • Die aktuellste Version wurde am 28.04.2012 von AdministratorSebastian gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen