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!

Tutorial

Grafiken mit der FreeImage-Bibliothek laden

von Mitgliedcsde_ratsSeite 1 von 2

In diesem Tutorial werde ich euch erklären, wie man mit FreeImage Grafiken laden und speichern kann.

Eins vorweg: FreeImage ist eine sehr sehr mächtige Bibliothek. Dieses kleine Tutorial kann nur einen sehr geringen Teil der möglichen Aspekte beleuchten.

Zuerst einmal wollen wir FreeImage einbinden:

#include "FreeImage.bi"
#include "crt.bi"

Die CRT-Erweiterung wird nur für die MemCpy-Funktion benötigt.

Um Bilder anzuzeigen und einen kompatiblen Puffer erzeugen zu können, muss zuerst der Bildschirm im 32-Bit-Modus initialisiert werden, zum Beispiel so:

ScreenRes 800, 600, 32

Mit der folgenden Funktion kann man fast jedes Bildformat einen FreeBASIC-Bildpuffer laden:

Function GetImage(Byval File As String, Format as integer, FormAttrib as integer) As Any Ptr
    Dim Dib As FIBITMAP Ptr
    Dim Dib32 as FIBITMAP Ptr
    Dim SprWidth As Integer
    Dim SprHeight As Integer
    Dim Sprite As Any Ptr
    Dim Bits As Any Ptr

    '  Bild laden:
    Dib = FreeImage_Load(Format, File, FormAttrib)
    ' Wenn ein Fehler aufgetreten ist, hat der Device Context den Wert 0
    If Dib = 0 Then Return 0

    ' Die Bilddaten werden von FreeImage auf den Kopf gestellt...
    FreeImage_FlipVertical Dib

    ' Ab hier wird mit 32 Bit Farbtiefe gearbeitet
    Dib32 = FreeImage_ConvertTo32Bits(Dib)

    SprWidth = FreeImage_GetWidth(Dib32)
    SprHeight = FreeImage_GetHeight(Dib32)
    Sprite = ImageCreate(SprWidth, SprHeight)
    Bits = FreeImage_GetBits(Dib32)

    ' Die Bilddaten kopieren...
    MemCpy CPtr(Zstring Ptr, Sprite) + 32, Bits, SprWidth * SprHeight * 4
    ' Folgende Version mit alten FreeBASIC-Versionen oder -lang deprecated verwenden:
    ' MemCpy CPtr(Zstring Ptr, Sprite) + 4, Bits, SprWidth * SprHeight * 4

    ' Speicher wieder freigeben
    FreeImage_Unload(Dib)
    FreeImage_Unload(Dib32)

    Return Sprite

End Function

Dazu gleich ein paar Beispiele:

#include "FreeImage.bi"
#include "crt.bi"
screenres 800, 600, 32

Declare Function GetImage(Byval File As String, Format As Integer, FormAttrib As Integer) As Any Ptr

Dim Pics(0 to 4) As Any Ptr
Pics(0) = GetImage("EinJPEG.jpg", FIF_JPEG, JPEG_DEFAULT)
Pics(1) = GetImage("EinPNG.png", FIF_PNG, PNG_DEFAULT)
Pics(2) = GetImage("EinTGA.tga", FIF_TARGA, TARGA_DEFAULT)
Pics(3) = GetImage("EinTIFF.tif", FIF_TIFF, TIFF_DEFAULT)
Pics(4) = GetImage("EinIcon.ico", FIF_ICO, ICO_DEFAULT)

For n As Integer = LBound(Pics) To UBound(Pics)
  Cls
  Put(0,0), Pics(n), PSet
  Sleep
Next n

Um Schreibarbeit zu sparen, kann man den Ladevorgang auch in einem Makro ablegen:

#define GImage_JPG(Filename) GetImage(Filename, FIF_JPEG, JPEG_DEFAULT)
#define GImage_PNG(Filename) GetImage(Filename, FIF_PNG, PNG_DEFAULT)
#define GImage_TGA(Filename) GetImage(Filename, FIF_TARGA, TARGA_DEFAULT)
#define GImage_TIFF(Filename) GetImage(Filename, FIF_TIFF, TIFF_DEFAULT)
#define GImage_ICO(Filename) GetImage(Filename, FIF_ICO, ICO_DEFAULT)

Auf der nächsten Seite wird erklärt, wie man Bilder auch wieder abspeichert.

 

Gehe zu Seite Gehe zu Seite  1  2  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 20.09.2007 von Mitgliedcsde_rats angelegt.
  • Die aktuellste Version wurde am 24.02.2008 von Mitgliedcsde_rats gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen