ich möchte die FreeImage.dll zum Anzeigen von Grafiken in einem ImageGadget verwenden. Bis zur Anzeige des siebten oder achten Bildes funktioniert der Code auch. Leider bleibt das ImageGadget irgendwann leer, bzw. der Aufruf CreateDIBitmap gibt mir 0 zurück.
Leider habe ich nirgends ein Beispiel zur Verwendung der DLL in PureBasic gefunden ausser dem Wrapper im Forum und bei den Includes zu JaPBe (ist scheinbar noch für PB-Version 3.93).
Die Hilfe zur DLL bringt mich nicht weiter. Evtl. kann mir ja einer einen Tip geben, woran es liegt dass er die Bilder anzeigt und dann nicht mehr
Ich befinde mich möglicherweise auch komplett auf dem Holzweg.
Hier mein Code:
[test.pb]
Code: Alles auswählen
IncludeFile "FreeImage.pbi"
FreeImage_Init(#False)
UseTIFFImageDecoder() ;nur für Teil 'ohne FreeImage.dll'
UseJPEGImageDecoder() ;nur für Teil 'ohne FreeImage.dll'
;- Window Constants
Enumeration
#Window_0
EndEnumeration
#gg_image_breite = 380
#gg_image_hoehe = 530
;- Gadget Constants
Enumeration
#ExplorerTree_0
#ExplorerList_0
#Image_0
EndEnumeration
;-Fenster erzeugen
Procedure Open_Window_0()
If OpenWindow(#Window_0, 0, 0, 800, 600, "TEST", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
If CreateGadgetList(WindowID(#Window_0))
ExplorerTreeGadget(#ExplorerTree_0, 0, 0, 200, 140, "",#PB_Explorer_NoFiles)
ExplorerListGadget(#ExplorerList_0, 0, 140, 200, 400, "",#PB_Explorer_NoFolders | #PB_Explorer_NoParentFolder)
ImageGadget(#Image_0, 210, 10, 400, 530, 0,#PB_Image_Border)
EndIf
EndIf
EndProcedure
Open_Window_0()
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If Event = #PB_Event_Gadget
If GadgetID = #ExplorerTree_0
SetGadgetText(#ExplorerList_0,GetGadgetText(#ExplorerTree_0) + "*.jpg")
verzeichnis.s = GetGadgetText(#ExplorerTree_0)
ElseIf GadgetID = #ExplorerList_0
eintrag = GetGadgetState(#ExplorerList_0)
If EventType = #PB_EventType_Change
datei.s = GetGadgetText(#ExplorerList_0) + GetGadgetItemText(#ExplorerList_0,eintrag,0)
Debug datei
If FileSize(datei)>0
;##############################################################################
; mit FreeImage-dll
geladenesBild = FreeImage_Load(#FIF_JPEG,datei,0)
Debug geladenesBild
Debug "BITS = " + Str(FreeImage_GetBits(geladenesBild))
Debug "BPP = " + Str(FreeImage_GetBPP(geladenesBild))
breite = FreeImage_GetWidth(geladenesBild)
hoehe = FreeImage_GetHeight(geladenesBild)
Debug breite
Debug hoehe
neu_imageID = FreeImage_DIB_To_BITMAP(geladenesBild)
SetGadgetState(#Image_0,neu_imageID)
FreeImage_Unload(geladenesBild)
;##############################################################################
;##############################################################################
; ohne FreeImage-dll
;If LoadImage(0, datei)
; breite = ImageWidth(0)
; hoehe = ImageHeight(0)
;
; Image0 = ImageID(0)
;
; neue_breite = #gg_image_breite
; neue_hoehe = hoehe * #gg_image_breite / breite
;
; ResizeImage(0,neue_breite,neue_hoehe)
; SetGadgetState(#Image_0, ImageID(0))
;
; Debug breite
; Debug hoehe
;
;EndIf
;##############################################################################
EndIf
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
Code: Alles auswählen
;Info: Wrapper for FreeImage.DLL for extended Picture-Formats
;XIncludeFile "API-Library.pbi"
Structure FreeImageIO
read_proc.l
write_proc.l
seek_proc.l
tell_proc.l
EndStructure
#FIF_UNKNOWN = -1
#FIF_BMP = 0
#FIF_ICO = 1
#FIF_JPEG = 2
#FIF_JNG = 3
#FIF_KOALA = 4
#FIF_LBM = 5
#FIF_MNG = 6
#FIF_PBM = 7
#FIF_PBMRAW = 8
#FIF_PCD = 9
#FIF_PCX = 10
#FIF_PGM = 11
#FIF_PGMRAW = 12
#FIF_PNG = 13
#FIF_PPM = 14
#FIF_PPMRAW = 15
#FIF_RAS = 16
#FIF_TARGA = 17
#FIF_TIFF = 18
#FIF_WBMP = 19
#FIF_PSD = 20
#FIF_CUT = 21
#FIF_IFF = #FIF_LBM
#FIC_MINISWHITE = 0
#FIC_MINISBLACK = 1
#FIC_RGB = 2
#FIC_PALETTE = 3
#FIC_RGBALPHA = 4
#FIQ_WUQUANT = 0
#FIQ_NNQUANT = 1
#True = 1
#False = 0
#BMP_DEFAULT = 0
#CUT_DEFAULT = 0
#ICO_DEFAULT = 0
#ICO_FIRST = 0
#ICO_SECOND = 0
#ICO_THIRD = 0
#IFF_DEFAULT = 0
#JPEG_DEFAULT = 0
#JPEG_FAST = 1
#JPEG_ACCURATE = 2
#JPEG_QUALITYSUPERB = $80
#JPEG_QUALITYGOOD = $100
#JPEG_QUALITYNORMAL = $200
#JPEG_QUALITYAVERAGE = $400
#JPEG_QUALITYBAD = $800
#KOALA_DEFAULT = 0
#LBM_DEFAULT = 0
#MNG_DEFAULT = 0
#PCD_DEFAULT = 0
#PCD_BASE = 1
#PCD_BASEDIV4 = 2
#PCD_BASEDIV16 = 3
#PCX_DEFAULT = 0
#PNG_DEFAULT = 0
#PNG_IGNOREGAMMA = 1
#PNM_DEFAULT = 0
#PNM_SAVE_RAW = 0
#PNM_SAVE_ASCII = 1
#RAS_DEFAULT = 0
#TARGA_DEFAULT = 0
#TARGA_LOAD_RGB888 = 1
#TARGA_LOAD_RGB555 = 2
#TIFF_DEFAULT = 0
#WBMP_DEFAULT = 0
#PSD_DEFAULT = 0
#MAX_PATH = 260
#BI_RGB = 0
#BI_RLE8 = 1
#BI_RLE4 = 2
#BI_BITFIELDS = 3
Global DLL_FreeImageHandle_
Procedure API_OpenLibrary(DLL$)
ProcedureReturn LoadLibrary_(DLL$)
EndProcedure
Procedure API_IsFunction(DLLHandle,name$)
ProcedureReturn GetProcAddress_(DLLHandle,name$)
EndProcedure
Procedure API_FreeLibrary(DLLHandle)
ProcedureReturn FreeLibrary_(DLLHandle)
EndProcedure
Procedure FreeImage_Init(LoadLocalPluginsOnly)
If DLL_FreeImageHandle_=0
DLL_FreeImageHandle_=API_OpenLibrary("FreeImage.DLL")
If DLL_FreeImageHandle_
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_Initialise@4"),LoadLocalPluginsOnly)
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Procedure FreeImage_DeInit()
Result=CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_DeInitialise@0"))
API_FreeLibrary(DLL_FreeImageHandle_)
ProcedureReturn Result
EndProcedure
Procedure.s FreeImage_GetVersion()
ProcedureReturn PeekS(CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetVersion@0")))
EndProcedure
Procedure.s FreeImage_GetCopyrightMessage()
ProcedureReturn PeekS(CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetCopyrightMessage@0")))
EndProcedure
Procedure FreeImage_Allocate(width,height,BitsPerPixel,Red_Mask,Green_Mask,Blue_Mask)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_Allocate@24"),width,height,BitsPerPixel,Red_Mask,Green_Mask,Blue_Mask)
EndProcedure
Procedure FreeImage_Free(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_Free@4"),dib)
EndProcedure
Procedure FreeImage_Unload(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_Unload@4"),dib)
EndProcedure
Procedure FreeImage_GetFIFCount()
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFIFCount@0"))
EndProcedure
Procedure FreeImage_GetFIFFromFormat(Format$)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFIFFromFormat@4"),@Format$)
EndProcedure
Procedure FreeImage_GetFIFFromMime(Mime$)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFIFFromMime@4"),@Mime$)
EndProcedure
Procedure.s FreeImage_GetFormatFromFIF(ImageFormat)
ProcedureReturn PeekS(CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFormatFromFIF@4"),ImageFormat))
EndProcedure
Procedure.s FreeImage_GetFIFExtensionList(ImageFormat)
ProcedureReturn PeekS(CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFIFExtensionList@4"),ImageFormat))
EndProcedure
Procedure.s FreeImage_GetFIFDescription(ImageFormat)
ProcedureReturn PeekS(CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFIFDescription@4"),ImageFormat))
EndProcedure
Procedure.s FreeImage_GetFIFRegExpr(ImageFormat)
ProcedureReturn PeekS(CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFIFDescription@4"),ImageFormat))
EndProcedure
Procedure FreeImage_GetFIFFromFilename(Filename$)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFIFFromFilename@4"),@Filename$)
EndProcedure
Procedure FreeImage_FIFSupportsReading(ImageFormat)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_FIFSupportsReading@4"),ImageFormat)
EndProcedure
Procedure FreeImage_FIFSupportsWriting(ImageFormat)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_FIFSupportsWriting@4"),ImageFormat)
EndProcedure
Procedure FreeImage_FIFSupportsExportBPP(ImageFormat,BitsPerPixel)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_FIFSupportsExportBPP@8"),ImageFormat,BitsPerPixel)
EndProcedure
Procedure FreeImage_Load(ImageFormat,Filename$,flags)
Debug "imageformat = " + Str(ImageFormat)
Debug @Filename$
Debug "flags = " + Str(flags)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_Load@12"),ImageFormat,@Filename$,flags)
EndProcedure
Procedure FreeImage_LoadFromHandle(ImageFormat,*IO_Callback_Functions.FreeImageIO,Handle,flags)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_LoadFromHandle@16"),ImageFormat,*IO_Callback_Functions.FreeImageIO,Handle,flags)
EndProcedure
Procedure FreeImage_Save(ImageFormat,dib,Filename$,flags)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_Save@16"),ImageFormat,dib,@Filename$,flags)
EndProcedure
Procedure FreeImage_GetFileType(Filename$)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFileType@8"),@Filename$,16)
EndProcedure
Procedure FreeImage_GetFileTypeFromHandle(*IO_Callback_Functions.FreeImageIO,Handle)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetFileTypeFromHandle@12"),*IO_Callback_Functions.FreeImageIO,Handle,16)
EndProcedure
Procedure FreeImage_GetColorsUsed(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetColorsUsed@4"),dib)
EndProcedure
Procedure FreeImage_GetBits(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetBits@4"),dib)
EndProcedure
Procedure FreeImage_GetBPP(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetBPP@4"),dib)
EndProcedure
Procedure FreeImage_GetWidth(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetWidth@4"),dib)
EndProcedure
Procedure FreeImage_GetHeight(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetHeight@4"),dib)
EndProcedure
Procedure FreeImage_GetPalette(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetPalette@4"),dib)
EndProcedure
Procedure FreeImage_GetInfoHeader(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetInfoHeader@4"),dib)
EndProcedure
Procedure FreeImage_GetInfo(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetInfo@4"),dib)
EndProcedure
Procedure FreeImage_GetColorType(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_GetColorType@4"),dib)
EndProcedure
Procedure FreeImage_ConvertTo8Bits(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_ConvertTo8Bits@4"),dib)
EndProcedure
Procedure FreeImage_ConvertTo16Bits555(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_ConvertTo16Bits555@4"),dib)
EndProcedure
Procedure FreeImage_ConvertTo16Bits565(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_ConvertTo16Bits565@4"),dib)
EndProcedure
Procedure FreeImage_ConvertTo24Bits(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_ConvertTo24Bits@4"),dib)
EndProcedure
Procedure FreeImage_ConvertTo32Bits(dib)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_ConvertTo32Bits@4"),dib)
EndProcedure
Procedure FreeImage_ColorQuantize(dib,Quantize)
ProcedureReturn CallFunctionFast(API_IsFunction(DLL_FreeImageHandle_,"_FreeImage_ColorQuantize@8"),dib,Quantize)
EndProcedure
Procedure FreeImage_DIB_To_BITMAP(dib)
Result=0
If dib=0 : ProcedureReturn 0 : EndIf
lpBMIH = FreeImage_GetInfoHeader(dib)
Debug "getinfoheader = " + Str(lpBMIH)
If lpBMIH=0 : ProcedureReturn 0 : EndIf
lpBMI = FreeImage_GetInfo(dib)
Debug "getinfo = " + Str(lpBMI)
If lpBMI=0 : ProcedureReturn 0 : EndIf
lpBits = FreeImage_GetBits(dib)
Debug "getbits = " + Str(lpBits)
If lpBits=0 : ProcedureReturn 0 : EndIf
hDC_Screen = GetDC_(GetDesktopWindow_())
Debug "hDC_Screen = " + Str(hDC_Screen)
If hDC_Screen=0 : ProcedureReturn 0 : EndIf
Debug "jetzt CreateDIBitmap_("+ Str(hDC_Screen) + ", " + Str(lpBMIH) + ", " + Str(#CBM_INIT) + "," + Str(lpBits) + "," + Str(lpBMI) + "," + Str(#DIB_RGB_COLORS) + ")"
Result = CreateDIBitmap_(hDC_Screen, lpBMIH, #CBM_INIT,lpBits,lpBMI,#DIB_RGB_COLORS)
If Result = 0
Debug "nu geht nix mehr"
EndIf
ReleaseDC_(GetDesktopWindow_(), hDC_Screen)
ProcedureReturn Result
EndProcedure
Procedure FreeImage_Bitmap_To_DIB(hBitmap)
BmpInfo.BITMAP
If hBitmap=0 : ProcedureReturn 0 : EndIf
If GetObject_(hBitmap, 4+4+4+4+2+2+4, BmpInfo)=0 : ProcedureReturn 0 : EndIf
TheWidth = BmpInfo\bmWidth
TheHeight = BmpInfo\bmHeight
TheBPP = 32
hDC_Screen = GetDC_(GetDesktopWindow_())
If hDC_Screen=0 : ProcedureReturn 0 : EndIf
TempDIB = FreeImage_Allocate(TheWidth, TheHeight, TheBPP,0,0,0)
If TempDIB=0 : ReleaseDC_(GetDesktopWindow_(),hDC_Screen):ProcedureReturn 0:EndIf
lpBMI = FreeImage_GetInfo(TempDIB)
If lpBMI=0 : FreeImage_Free(TempDIB):ReleaseDC_(GetDesktopWindow_(),hDC_Screen):ProcedureReturn 0:EndIf
lpBits = FreeImage_GetBits(TempDIB)
If lpBits=0 : FreeImage_Free(TempDIB):ReleaseDC_(GetDesktopWindow_(),hDC_Screen):ProcedureReturn 0:EndIf
If GetDIBits_(hDC_Screen, hBitmap, 0, TheHeight,lpBits,lpBMI,#DIB_RGB_COLORS)
ReleaseDC_(GetDesktopWindow_(),hDC_Screen)
ProcedureReturn TempDIB
Else
FreeImage_Free(TempDIB)
ReleaseDC_(GetDesktopWindow_(),hDC_Screen)
ProcedureReturn 0
EndIf
EndProcedure
Procedure FreeImage_GetBitmapWidth(hBitmap)
BmpInfo.BITMAP
If hBitmap = 0 : ProcedureReturn 0 : EndIf
If GetObjectType_(hBitmap) <> #OBJ_BITMAP : ProcedureReturn 0 : EndIf
If GetObject_(hBitmap, 4+4+4+4+2+2+4, BmpInfo) = 0 : ProcedureReturn 0 : EndIf
ProcedureReturn BmpInfo\bmWidth
EndProcedure
Procedure FreeImage_GetBitmapHeight(hBitmap)
BmpInfo.BITMAP
If hBitmap = 0 : ProcedureReturn 0 : EndIf
If GetObjectType_(hBitmap) <> #OBJ_BITMAP : ProcedureReturn 0 : EndIf
If GetObject_(hBitmap, 4+4+4+4+2+2+4, BmpInfo) = 0 : ProcedureReturn 0 : EndIf
ProcedureReturn BmpInfo\bmHeight
EndProcedure
Global FI_AdrMEM.l
Global FI_IOMEM.FreeImageIO
Procedure FI_ReadMEM(Buffer,Size,count,Handle)
For c=0 To count-1
For s=0 To Size-1
PokeB(Buffer+s,PeekB(FI_AdrMEM+s))
Next
FI_AdrMEM + Size
Buffer + Size
Next
ProcedureReturn count
EndProcedure
Procedure FI_WriteMEM(Buffer,Size,count,Handle)
ProcedureReturn Size
EndProcedure
Procedure FI_SeekMEM(Handle,offset,origin)
If origin = #SEEK_SET
FI_AdrMEM = Handle + offset
Else
FI_AdrMEM + offset
EndIf
ProcedureReturn 0
EndProcedure
Procedure FI_TellMEM(Handle)
ProcedureReturn (FI_AdrMEM - Handle)
EndProcedure
FI_IOMEM\read_proc = @FI_ReadMEM()
FI_IOMEM\write_proc = @FI_WriteMEM()
FI_IOMEM\tell_proc = @FI_TellMEM()
FI_IOMEM\seek_proc = @FI_SeekMEM()
#FIC_noconvert=0
#FIC_8bitsWU=1
#FIC_8bitsNN=2
#FIC_16bits555=3
#FIC_16bits565=4
#FIC_24bits=5
#FIC_32bits=6
#FIC_bw=7
Procedure FI_SetClipboard(ImageNR)
ClearClipboard()
dib=copyimage_(ImageID(ImageNR),#IMAGE_BITMAP,0,0,#LR_COPYRETURNORG)
SetClipboardImage(dib)
EndProcedure
Procedure FI_GetClipboard(ImageNR)
Result=0
ImageID=GetClipboardImage(ImageNR)
If ImageID>0
Result=CreateImage(ImageNR,FreeImage_GetBitmapWidth(ImageID),FreeImage_GetBitmapHeight(ImageID))
StartDrawing(ImageOutput(ImageNR))
DrawImage(ImageID,0,0)
StopDrawing()
EndIf
ProcedureReturn Result
EndProcedure
Procedure FI_SaveImage(ImageNR,file$,convert,flags)
Result=0
ImageFormat=FreeImage_GetFIFFromFormat(GetExtensionPart(file$))
If ImageFormat<>#FIF_UNKNOWN
If FreeImage_FIFSupportsWriting(ImageFormat)
If GetExtensionPart(file$)=""
file$+"."+StringField(FreeImage_GetFIFExtensionList(ImageFormat),1,",")
EndIf
dib=FreeImage_Bitmap_To_DIB(ImageID(ImageNR))
If dib
Select convert
Case #FIC_8bitsWU
If FreeImage_FIFSupportsExportBPP(ImageFormat,8)
dibx=FreeImage_ConvertTo24Bits(dib)
dib2=FreeImage_ColorQuantize(dibx,#FIQ_WUQUANT)
EndIf
Case #FIC_8bitsNN
If FreeImage_FIFSupportsExportBPP(ImageFormat,8)
dibx=FreeImage_ConvertTo24Bits(dib)
dib2=FreeImage_ColorQuantize(dibx,#FIQ_NNQUANT)
EndIf
Case #FIC_16bits555
If FreeImage_FIFSupportsExportBPP(ImageFormat,16)
dib2=FreeImage_ConvertTo16Bits555(dib)
EndIf
Case #FIC_16bits565
If FreeImage_FIFSupportsExportBPP(ImageFormat,16)
dib2=FreeImage_ConvertTo16Bits565(dib)
EndIf
Case #FIC_24bits
If FreeImage_FIFSupportsExportBPP(ImageFormat,24)
dib2=FreeImage_ConvertTo24Bits(dib)
EndIf
Case #FIC_32bits
If FreeImage_FIFSupportsExportBPP(ImageFormat,32)
dib2=FreeImage_ConvertTo32Bits(dib)
EndIf
Case #FIC_bw
If FreeImage_FIFSupportsExportBPP(ImageFormat,8)
dib2=FreeImage_ConvertTo8Bits(dib)
EndIf
EndSelect
If dibx :FreeImage_Free(dibx):EndIf
If dib2
FreeImage_Free(dib)
dib=dib2
EndIf
Result=FreeImage_Save(ImageFormat,dib,file$,flags)
FreeImage_Free(dib)
EndIf
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure FI_LoadImage(ImageNR,in$,flags)
Result=0
ImageFormat=FreeImage_GetFileType(in$)
If ImageFormat<>#FIF_UNKNOWN
dib=FreeImage_Load(ImageFormat,in$,flags)
If dib
width=FreeImage_GetWidth(dib)
height=FreeImage_GetHeight(dib)
bitmap=FreeImage_DIB_To_BITMAP(dib)
If bitmap
Result=CreateImage(ImageNR,width,height)
StartDrawing(ImageOutput(ImageNR))
DrawImage(bitmap,0,0)
StopDrawing()
DeleteObject_(bitmap)
EndIf
FreeImage_Free(dib)
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure FI_CatchImage(ImageNR,adr,flags)
FI_AdrMEM=adr
Result=0
ImageFormat=FreeImage_GetFileTypeFromHandle(@FI_IOMEM.FreeImageIO,adr)
If ImageFormat<>#FIF_UNKNOWN
FI_AdrMEM=adr
dib=FreeImage_LoadFromHandle(ImageFormat,@FI_IOMEM.FreeImageIO,adr,flags)
If dib
width=FreeImage_GetWidth(dib)
height=FreeImage_GetHeight(dib)
bitmap=FreeImage_DIB_To_BITMAP(dib)
If bitmap
Result=CreateImage(ImageNR,width,height)
StartDrawing(ImageOutput(ImageNR))
DrawImage(bitmap,0,0)
StopDrawing()
DeleteObject_(bitmap)
EndIf
FreeImage_Free(dib)
EndIf
EndIf
ProcedureReturn Result
EndProcedure