michaelblasin
Anmeldungsdatum: 09.11.2010 Beiträge: 38
|
Verfasst am: 10.05.2019, 18:26 Titel: Freeimage Jpeg, Png, Tif und Bmp Bilder einlesen, anzeigen |
|
|
Hallo,
Es gibt ein Beispiel im Tutorial Grafiken mit der FreeImage-Bibliothek laden von csde_rats
Ich habe die Beispielbilder auf meinem Scanner mit 24 Bit erstellt. Die ‚Tif’ und die ‚Bmp’ Dateien entsprechen der Vorlage. Die ‚Jpeg’ und die ‚Png’ Bilder sind verzerrt, in etwa um 45 Grad gedreht.
Die ‚Tif’ und die ‚Bmp’ Datei ist mir aber eigentlich zu groß, um sie zu benutzen.
Gruss Michael
Code: | #Include "Freeimage393.bi"
#include "crt.bi"
screenres 800, 600, 32
Function GetImage (Byval File_1 As String, Format_1 as integer, FormAttrib_1 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_1, File_1, FormAttrib_1)
' 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:
Dim Pics(0 to 3) As Any Ptr
Pics(0) = GetImage("FreeImageBilderladen_EinJPEG-24Bit-VomScanner.jpg", FIF_JPEG, JPEG_DEFAULT)
Pics(1) = GetImage("FreeImageBilderladen_EinPng-SnippingTool.png", FIF_PNG, PNG_DEFAULT)
Pics(2) = GetImage("FreeImageBilderladen_EinTIFF-24Bit-VomScanner.tif", FIF_TIFF, TIFF_DEFAULT)
Pics(3) = GetImage("FreeImageBilderladen_EinBmp-24Bit-VomScanner.BMP", FIF_BMP, BMP_DEFAULT)
For n As Integer = LBound(Pics) To UBound(Pics)
Cls
IF Pics(n) = 0 THEN PRINT "Bild nicht gefunden, lfd.Nummer ", n: SLEEP
Put(0,0), Pics(n), PSet
Sleep
Next n
SLEEP |
|
|