michaelblasin
 
 
  Anmeldungsdatum: 09.11.2010 Beiträge: 38
 
  | 
		
			
				 Verfasst am: 12.05.2019, 09: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 | 	 
  | 
			 
		  |