FreeBASIC マニュアルのトップに戻る

FreeBASIC ExtLibfreeimage

目次→その他→ライブラリ・ヘッダー索引FreeImage←オリジナル・サイト

FreeImage


FreeImage は、今日のマルチメディア・アプリケーションで必要とされる、PNG、BMP、JPEG、TIFF などのようなポピュラーな描画画像形式を、サポートしたいと思う開発者のための、オープン・ソース・ライブラリ・プロジェクトです。
FreeImage は、使いやすくて、速く、そして、マルチスレッディングで安全です。
そして、Windows のすべての 32ビット・バージョンと互換性を持ち、クロスプラットフォーム(Linux と Mac OS X の両方で動く)です。

ウエブ・サイト: http://freeimage.sourceforge.net/
利用できる環境: Win32, Linux
include するヘッダー: FreeImage.bi
ヘッダー・バージョン: 3.15.1
使用例: 有り, examples/files/FreeImage

例:
以下は、FreeBASIC で FreeImage を使う例です。
Windows を使う場合は、FreeImage site でダウンロードできる freeimage.dll が必要になります。

'' FreeImage を使って、共通の画像形式の全てをロードするためのコード例。
'' この例は、コマンド・ライン引き数で渡された画像をロードします。

'' ロードするときにエラーがあった場合、関数 FI_Load はヌルポインタ(0)を返します。
'' エラーでなければ、32 ビットの 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
    ImageDestroy(image)
Else
    Print "Problem while loading file : " & filename
End If

Sleep


ライブラリ・ヘッダー索引に戻る

←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2018-10-27 15:51:43
日本語翻訳:WATANABE Makoto、原文著作者:SirMud

ホームページのトップに戻る

表示-非営利-継承