michaelblasin
Anmeldungsdatum: 09.11.2010 Beiträge: 38
|
Verfasst am: 12.05.2019, 10:09 Titel: Freeimage Jpeg, Png, Tif + Bmp Bilder anzeigen (Korrektur) |
|
|
Hallo, 12-05-2019
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’, die ‚Bmp’ und die ‚Jpeg’ Dateien entsprechen der Vorlage. Die ‚Png’ Bilder sind verzerrt, in etwa um 45 Grad gedreht.
Das Problem hat mit der ‚Jpeg’ Datei hat sich gelöst (siehe meinen Beitrag vom 10-05-2019).
Die ‚Png’ Datei ist zur Zeit kein Problem. Mich würde nur interessieren, woran es liegen könnte, daß das ‚Png’ Bild verzerrt ist.
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 |
|
|