FreeImage
 
FreeImage является проектом библиотеки с открытым исходным кодом для разработчиков, которые хотели бы поддерживать популярные графические форматы изображений PNG, BMP, JPEG, TIFF и другие для мультимедийных приложений. FreeImage проста в использовании, быстра, имеет многопоточные режимы, совместима со всеми 32-битными версиями Windows, Linux и Mac OS X

Вебсайт: http://freeimage.sourceforge.net/
Поддерживаемые платформы: Win32, Linux
Заголовки: FreeImage.bi
Версия заголовков: 3.15.1
Примеры: в examples/files/FreeImage

Пример

Вот пример использования FreeImage в FreeBASIC. При использовании ОС Windows вам потребуется FreeImage.dll которую можно скачать с сайта FreeImage.
'' Пример кода для загрузки всех распространенных типов изображений, используя FreeImage.
'' Пример загружает изображение, переданное как аргумент командной строки.

'' Функция FI_Load возвращает пустой указатель (0), если была ошибка во время
'' загрузки.  В противном случае возвращает 32-bit PUT совместимый буфер.

#include "FreeImage.bi"
#include "crt.bi"
#include "fbgfx.bi"

Function FI_Load(filename As String) As Any Ptr
    If Len(filename) = 0 Then
        Return NULL
    End If

    '' Узнаем формат изображения
    Dim As FREE_IMAGE_FORMAT form = FreeImage_GetFileType(StrPtr(filename), 0)
    If form = FIF_UNKNOWN Then
        form = FreeImage_GetFIFFromFilename(StrPtr(filename))
    End If

    '' Выход, если неизвестный формат
    If form = FIF_UNKNOWN Then
        Return NULL
    End If

    '' Всегда загружайте jpeg правильно
    Dim As UInteger flags = 0
    If form = FIF_JPEG Then
        flags = JPEG_ACCURATE
    End If

    '' Загружаем изображение в память
    Dim As FIBITMAP Ptr image = FreeImage_Load(form, StrPtr(filename), flags)
    If image = NULL Then
        '' FreeImage ошибка чтения в изображении
        Return NULL
    End If

    '' Поворот изображения, чтобы оно соответствовало FB системе координат
    FreeImage_FlipVertical(image)

    '' Преобразование до 32 бит на пиксель
    Dim As FIBITMAP Ptr image32 = FreeImage_ConvertTo32Bits(image)

    '' Получаем размер этого изображения
    Dim As UInteger w = FreeImage_GetWidth(image)
    Dim As UInteger h = FreeImage_GetHeight(image)

    '' Создание FB изображения того же размера
    Dim As fb.Image Ptr sprite = ImageCreate(w, h)

    Dim As Byte Ptr target = CPtr(Byte Ptr, sprite + 1)
    Dim As Integer target_pitch = sprite->pitch

    Dim As Any Ptr source = FreeImage_GetBits(image32)
    Dim As Integer source_pitch = FreeImage_GetPitch(image32)

    '' И Копируем пиксели, ряд за рядом
    For y As Integer = 0 To (h - 1)
        memcpy(target + (y * target_pitch), _
               source + (y * source_pitch), _
               w * 4)
    Next

    FreeImage_Unload(image32)
    FreeImage_Unload(image)

    Return sprite
End Function

ScreenRes 640, 480, 32

Dim As String filename = Command(1)

Dim As Any Ptr image = FI_Load(filename)
If image <> 0 Then
    Put (0, 0), image
Else
    Print "Problem while loading file : " & filename
End If

Sleep