mieki256's diary



2020/01/21(火) [n年前の日記]

#1 [love2d] Love2Dがサポートしてる画像フォーマットについて

調べてみたら、Love2D はそもそも gif をサポートしてなかった…。Love2D 0.10.0 の時点で、対応画像フォーマットを絞っていたらしい。

_0.10.0 (日本語) - LOVE
_0.10.0 - LOVE

PNG, JPEG, TGA, および BMP を除くすべてのファイル形式 (非圧縮テクスチャ) への対応を廃止。
つまり、使えるのは、この4種類。gif には未対応。

道理で、gif をドロップしても「そんなフォーマット知らねえよ」と言われたわけで。

コミュニティの掲示板でも、「gifを表示したいんですけど…」「はあ? あんなクソ画像フォーマット使ってんじゃねえよ。png使え」みたいなやり取りが。

_GIFs in love? - LOVE

もっとも、gifに対応させるライブラリをガリガリと書き上げた方もいらっしゃるようで…。

_pgimeno/gifload: Love2D module to load GIF files, in pure LuaJIT+FFI - Keywords: library gif love2d - NotABug.org: Free code hosting
_gifload, a GIF image loader in pure LuaJIT+FFI - LOVE

また、Love2D から画像を保存する場合は、pngのみに対応、とのことらしい。

_What image files are supported on LOVE? - LOVE

昨日のソースを修正。 :

画像ファイルのパスを渡すと Image で返す関数、にしてみた。前述の、4種類の画像フォーマットに対応してみたつもり。動作確認環境は、Windows10 x64 1909 + Love2D 11.3。

function loadImage(fpath)
  -- Support : png, jpg, bmp, tga
  -- Not support : gif, tif
  local ext = string.lower(string.sub(fpath, string.len(fpath) - 3))
  if ext == ".png" or ext == ".bmp" or ext == ".jpg" or ext == ".tga" then
    local f = io.open(fpath, "rb")
    local contents = f:read("*all")
    local data = love.filesystem.newFileData(contents, "temp" .. ext)
    local imgdata = love.image.newImageData(data)
    f:close()
    return love.graphics.newImage(imgdata), ext
  end
  return nil, ext
end
Image と、拡張子の文字列(".png"等)を返すけれど、未対応の画像フォーマットを渡したり、何か問題があって読み込めない場合は、Image として nil が返ってくる。

拡張子の判別は、渡したファイルパスの最後の4文字だけをチェックしている手抜き処理なので、「.jpg」は開けるけど、「.jpeg」は開けない。

Lua の文字列用関数についても、一応メモ。
  • string.len("hoge") で、文字列の長さを返す。
  • string.sub("hoge", n) で、n文字目から最後までの文字列を取り出す。
  • string.lower("HOGE") で、文字列を小文字に変換。
  • 「..」で、文字列を結合。

> lua -i
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio

> string.len("hoge")
4

> string.sub("hoge", 2)
oge

> string.sub("hoge", 3)
ge

> string.sub("hoge", 4)
e

> string.lower("HOGE")
hoge

> "hoge" .. "fuga"
hogefuga

ファイル選択ダイアログについて。 :

ググっていたら、FFIなるものを使って、Love2D からファイル選択ダイアログを利用することができていた時期もあるらしい。

_File chooser dialogs with FFI - LOVE
_Foreign function interface - Wikipedia

ただ、各OS向けに記述が必要になるし、昔は動いてた Windows用の記述が Windows10 では動かなくなった、との報告もされていた。

以上です。

過去ログ表示

Prev - 2020/01 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project