Btw, you might find my version of his lib to be easier to use. I made some changes if I remember correctly, I used some of his method and some of someone else's method so that I could do more of the stuff with Blitzplus commands instead of DLL calls.
My functions don't support all the functionality of the library, they just do what you probably want to, which is load and save images as simply as possible.
My functions don't support all the functionality of the library, they just do what you probably want to, which is load and save images as simply as possible.
; ----------------------------------------------------------------------------------------------------------------------------------- ; To use these functions you must create a freeimage.decls file in your decls directory with the following lines: ; ; .lib "FreeImage.dll" ; ; FIAllocate%( Width%,Height%,BPP%,RedMask%,GreenMask%,BlueMask% ) : "_FreeImage_Allocate@24" ; FILoad%( ImageType%,File$,Mode% ) : "_FreeImage_Load@12" ; FISave%( ImapeType%,FIBITMAP%,File$,Flags% ) : "_FreeImage_Save@16" ; FIUnload%( FIBITMAP% ) : "_FreeImage_Unload@4" ; FIGetDescription$( FREE_IMAGE_FORMAT% ) : "_FreeImage_GetFIFDescription@4" ; FIGetType%( File$,Default% ) : "_FreeImage_GetFileType@8" ; FIToBank( Bank*,FIBITMAP%,Pitch%,Depth%,Red_Mask%,Green_Mask%,Blue_Mask%,TopDown% ) : "_FreeImage_ConvertToRawBits@32" ; FIGuessType%( File$ ) : "_FreeImage_GetFIFFromFilename@4" ; FIGetClrUsed%( FIBITMAP% ) : "_FreeImage_GetColorsUsed@4" ; FIGetBitStart%( FIBITMAP% ) : "_FreeImage_GetBits@4" ; FIGetScanLine%( FIBITMAP%,ScanLine% ) : "_FreeImage_Get@8" ; FIGetDepth%( FIBITMAP% ) : "_FreeImage_GetBPP@4" ; FIGetWidth%( FIBITMAP% ) : "_FreeImage_GetWidth@4" ; FIGetBits%( FIBITMAP% ) : "_FreeImage_GetBits@4" ; FIGetHeight%( FIBITMAP% ) : "_FreeImage_GetHeight@4" ; FIGetLine%( FIBITMAP% ) : "_FreeImage_GetLine@4" ; FIGetPitch%( FIBITMAP% ) : "_FreeImage_GetPitch@4" ; FIGetSize%( FIBITMAP% ) : "_FreeImage_GetDIBSize@4" ; FIGetPalette%( FIBITMAP% ) : "_FreeImage_GetPalette@4" ; FIGetDPMX%( FIBITMAP% ) : "_FreeImage_GetDotsPerMeterX@4" ; FIGetDPMY%( FIBITMAP% ) : "_FreeImage_GetDotsPerMeterY@4" ; FIGetHeader%( FIBITMAP% ) : "_FreeImage_GetInfoHeader@4" ; FIGetInfo%( FIBITMAP% ) : "_FreeImage_GetInfo@4" ; FIGetColorType%( FIBITMAP% ) : "_FreeImage_GetColorType@4" ; FIGetRedMask%( FIBITMAP% ) : "_FreeImage_GetRedMask@4" ; FIGetGreenMask%( FIBITMAP% ) : "_FreeImage_GetGreenMask@4" ; FIGetBlueMask%( FIBITMAP% ) : "_FreeImage_GetBlueMask@4" ; FIGetTranCount%( FIBITMAP% ) : "_FreeImage_GetTransparencyCount@4" ; FIGetTranTable%( FIBITMAP% ) : "_FreeImage_GetTransparencyTable@4" ; FISetTran( FIBITMAP%,Flag% ) : "_FreeImage_SetTransparent@8" ; FIIsTran%( FIBITMAP% ) : "_FreeImage_IsTransparent@4" ; FIConvert8Bits%( FIBITMAP% ) : "_FreeImage_ConvertTo8Bits@4" ; FIConvert555%( FIBITMAP% ) : "_FreeImage_ConvertTo16Bits555@4" ; FIConvert565%( FIBITMAP% ) : "_FreeImage_ConvertTo16Bits565@4" ; FIConvert24Bits%( FIBITMAP% ) : "_FreeImage_ConvertTo24Bits@4" ; FIConvert32Bits%( FIBITMAP% ) : "_FreeImage_ConvertTo32Bits@4" ; FIColorQuantize%( FIBITMAP%,Flag% ) : "_FreeImage_ColorQuantize@8" ; FIThreshold%( FIBITMAP%,Flag% ) : "_FreeImage_Threshold@8" ; FIDither%( FIBITMAP%,Algo% ) : "_FreeImage_Dither@8" ; FIFromBank%( Bank*,Width%,Height%,Pitch%,Depth%,RedMask%,GreenMask%,BlueMask%,TopDown% ) : "_FreeImage_ConvertFromRawBits@36" ; FIClone%(DIB%) : "_FreeImage_Clone@4" ; ; ----------------------------------------------------------------------------------------------------------------------------------- ; Freeimage supports the following file types: ; ; BMP files [reading, writing] ; TARGA files [reading, writing] ; TIFF files [reading, writing] ; JPEG/JIF files [reading, writing] ; GIF files [reading, writing] ; PNG files [reading, writing] ; WBMP files [reading, writing] ; ICO files [reading, writing] ; PBM files [reading, writing] ; PGM files [reading, writing] ; PPM files [reading, writing] ; XPM files [reading, writing] ; ; DDS files [reading] ; PhotoShop files [reading] ; Kodak PhotoCD [reading] ; PCX files [reading] ; Dr. Halo files [reading] ; IFF files [reading] ; JNG files [reading] ; KOALA files [reading] ; LBM files [reading] ; MNG files [reading] ; Sun RAS files [reading] ; XBM files [reading] ; ----------------------------------------------------------------------------------------------------------------------------------- ; Image formats: Const FIF_UNKNOWN = -1 Const FIF_BMP = 0 Const FIF_ICO = 1 Const FIF_JPEG = 2 Const FIF_JNG = 3 Const FIF_KOALA = 4 Const FIF_LBM = 5 Const FIF_IFF = 5 Const FIF_MNG = 6 Const FIF_PBM = 7 Const FIF_PBMRAW = 8 Const FIF_PCD = 9 Const FIF_PCX = 10 Const FIF_PGM = 11 Const FIF_PGMRAW = 12 Const FIF_PNG = 13 Const FIF_PPM = 14 Const FIF_PPMRAW = 15 Const FIF_RAS = 16 Const FIF_TARGA = 17 Const FIF_TIFF = 18 Const FIF_WBMP = 19 Const FIF_PSD = 20 Const FIF_CUT = 21 Const FIF_XBM = 22 Const FIF_XPM = 23 Const FIF_DDS = 24 Const FIF_GIF = 25 ; Compression settings: Const FIC_DEFAULT = $0 Const FIC_BMP_RLE = $1 Const FIC_JPEG_SUPERB = $80 ; 100% quality Const FIC_JPEG_GOOD = $100 ; 75% quality (default) Const FIC_JPEG_NORMAL = $200 ; 50% quality Const FIC_JPEG_AVERAGE = $400 ; 25% quality Const FIC_JPEG_BAD = $800 ; 10% quality Const FIC_TIFF_PACKBITS = $100 Const FIC_TIFF_DEFLATE = $200 Const FIC_TIFF_ADOBE_DEFLATE = $400 Const FIC_TIFF_NONE = $800 ; Image loading flags: Const JPEG_ACCURATE = 2 ; Image formats: Global FIB_BitDepth[4] Global FIB_RedMask[4] Global FIB_GreenMask[4] Global FIB_BlueMask[4] FIB_BitDepth[1] = 16 FIB_RedMask[1] = $1F FIB_GreenMask[1] = $7E0 FIB_BlueMask[1] = $F800 FIB_BitDepth[2] = 16 FIB_RedMask[2] = $1F FIB_GreenMask[2] = $3E0 FIB_BlueMask[2] = $7C00 FIB_BitDepth[3] = 24 FIB_RedMask[3] = $FF0000 FIB_GreenMask[3] = $FF00 FIB_BlueMask[3] = $FF FIB_BitDepth[4] = 32 FIB_RedMask[4] = $FF0000 FIB_GreenMask[4] = $FF00 FIB_BlueMask[4] = $FF ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function loads an image into Blitz using the Freeimage library. ; ----------------------------------------------------------------------------------------------------------------------------------- Function FILoadImage(Filename$) Local FI_FileType Local FI_Bitmap Local FI_Width, FI_Height Local DestImage, DestImageBuffer Local DestImageBank, DestImagePitch, DestImageFormat Local DestImageDepth, DestImageRedMask, DestImageGreenMask, DestImageBlueMask ; Get the filetype. ; First try to get the file type from the file header. ; If that fails, try to guess the filetype from the file extension. ; If that fails, return from function with failure. FI_FileType = FIGetType(Filename$, 0) If FI_FileType = -1 FI_FileType = FIGuessType(Filename$) If FI_FileType = -1 Return EndIf ; Attempt to load the image. If the image fails to load, return from the function. If FI_FileType = FIF_JPEG ;FI_Bitmap = FILoad(FI_FileType, Filename$, JPEG_ACCURATE) FI_Bitmap = FILoad(FI_FileType, Filename$, 0) Else FI_Bitmap = FILoad(FI_FileType, Filename$, 0) EndIf If Not FI_Bitmap Return ; Get the width and height of the image. FI_Width = FIGetWidth(FI_Bitmap) FI_Height = FIGetHeight(FI_Bitmap) ; Create an image in Blitz with the same width and height as the image loaded with freeimage. DestImage = CreateImage(FI_Width, FI_Height, 1, 1) DestImageBuffer = ImageBuffer(DestImage) ; Copy the FI_Image to the Blitz image. LockBuffer DestImageBuffer DestImageBank = LockedPixels(DestImageBuffer) DestImagePitch = LockedPitch(DestImageBuffer) DestImageFormat = LockedFormat(DestImageBuffer) DestImageDepth = FIB_BitDepth[DestImageFormat] DestimageRedMask = FIB_RedMask[DestImageFormat] DestimageGreenMask = FIB_GreenMask[DestImageFormat] DestimageBlueMask = FIB_BlueMask[DestImageFormat] FIToBank(DestImageBank, FI_Bitmap, DestImagePitch, DestImageDepth, DestimageRedMask, DestimageGreenMask, DestimageBlueMask, 0) UnlockBuffer DestImageBuffer ; Free the loaded image. FIUnload FI_Bitmap ; Return the pointer to the new Blitz image. Return DestImage End Function ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function saves an image from Blitz using the Freeimage library. ; For JPEG, can specify integer 0..100 for compression to indicate desired quality. ; ----------------------------------------------------------------------------------------------------------------------------------- Function FISaveImage(SrcImage, Filename$, FI_FileType=FIF_UNKNOWN, FI_Compression=0) Local FI_Bitmap Local Success If SrcImage <> 0 ; If FI_FileType is unknown, attempt to determine the filetype the user is trying to save from the file extension. ; Return from the function if fail. If FI_FileType = FIF_UNKNOWN FI_FileType = FIGuessType(Filename$) If FI_FileType = FIF_UNKNOWN Return EndIf ; Is saving supported for this format? ; Create a FI bitmap from the source image. FI_Bitmap = FIConvertImageToFIB(SrcImage) ; Attempt to save the bitmap using the specified format. Success = FISave(FI_FileType, FI_Bitmap, Filename$, FI_Compression) If Not Success Then Notify "Unable to save image:" + Chr(10) + Filename$, True ; Free the FI bitmap. FIUnload(FI_Bitmap) EndIf End Function ; ----------------------------------------------------------------------------------------------------------------------------------- ; This function takes a Blitz image as input, and returns a FI bitmap. ; ----------------------------------------------------------------------------------------------------------------------------------- Function FIConvertImageToFIB(SrcImage) Local SrcBuffer Local SrcWidth, SrcHeight Local SrcBank, SrcPitch, SrcFormat Local SrcDepth Local SrcRedMask, SrcGreenMask, SrcBlueMask Local FI_Bitmap, FI_Bitmap24 ; Convert the Blitz image to an FI_Bitmap: SrcBuffer = ImageBuffer(SrcImage) LockBuffer SrcBuffer SrcWidth = ImageWidth(SrcImage) SrcHeight = ImageHeight(SrcImage) SrcBank = LockedPixels(SrcBuffer) SrcPitch = LockedPitch(SrcBuffer) SrcFormat = LockedFormat(SrcBuffer) SrcDepth = FIB_BitDepth[SrcFormat] SrcRedMask = FIB_RedMask[SrcFormat] SrcGreenMask = FIB_GreenMask[SrcFormat] SrcBlueMask = FIB_BlueMask[SrcFormat] FI_Bitmap = FIFromBank(SrcBank, SrcWidth, SrcHeight, SrcPitch, SrcDepth, SrcRedMask, SrcGreenMask, SrcBlueMask,0) UnlockBuffer SrcBuffer ; Convert FI_Bitmap to 24bit if neccessary: If FIGetDepth(FI_Bitmap) <> 24 FI_Bitmap24 = FIConvert24Bits(FI_Bitmap) If FI_Bitmap24 FIUnload(FI_Bitmap) FI_Bitmap = FI_Bitmap24 EndIf EndIf ; Return FI_Bitmap: Return FI_Bitmap End Function