LoginSignup
10
9

More than 5 years have passed since last update.

ofImageLoadSettingsについて

Last updated at Posted at 2016-05-03

参考画像

手前味噌ですが, 以前oF本家に投げてたPRがmergeされてたのでご紹介.

ofImageLoadSettings?

FreeImageのjpegの読み込み時のオプション設定です.
0.9.3辺りから使えるはず. (0.10までお預けのようです. master branchには入っています)
(今後他のフォーマットにも拡張されるかも?)

使い方

ofImageLoadSettings setting;
setting.accurate = true;
setting.grayscale = true;
ofImage image;
image.load(file_path, setting);

なにこれ?

settingは現在4つの項目を持っています.

プロパティ 効果
accurate trueに設定すると読み込み時に精度重視で読み込む.
falseのときは速度重視
grayscale trueに設定するとグレースケールで読み込む
separateCMYK trueに設定するとCMYKでseparateしてくれるはず(あまり調べてない)
exifRotate trueに設定するとEXIF情報に合わせて回転してくれるはず(あまり調べてない)

以上です.
グレースケールにしてくれるのとか結構便利そうな気がしない?

accurate

そもそもこれを見つけた原因がoFでjpeg読み込むとなんか荒れない?って話をmotoishmzとしたことがきっかけ.
そもそもjpegって符号化されたデータの小さい成分無視しても大体見れる(大体上15%くらい読んだらとりあえず元の絵に近い物が出てくる)のでデコーダーによっては「小さい部分無視したら速くなって最高!」って言いながらそういう実装してるわけですね.

で, oFの内部で使われてるFreeImage調べてたらなんかそんな風なオプションあるぞと. これじゃん!
って思ったけどそれはofImage内で固定されてたのでその設定外出ししようぜ, と言って投げたのがこれのPRなわけです.

そんなことを踏まえるとどんだけ速度に差が出るんだよ!って気になりますよね.

double d = 0.0;

d = ofGetElapsedTimeMillis();
setting.accurate = true;
for(std::size_t i = 0; i < loopNum; i++) {
    ofImage image;
    image.load(img_path, setting);
}
ofLogNotice("accurete") << long(ofGetElapsedTimeMillis() - d) * 0.001;

d = ofGetElapsedTimeMillis();
setting.accurate = false;
for(std::size_t i = 0; i < loopNum; i++) {
    ofImage image;
    image.load(img_path, setting);
}
ofLogNotice("not accurete") << long(ofGetElapsedTimeMillis() - d) * 0.001;

やってみました.
結果,

  • 600x450の画像を1000回
    • accurete: 4.919
    • not accurete: 3.287
      • 148%高速
  • 1024x718の画像を1000回
    • accurate: 13.920
    • not accurate: 9.879
      • 140%高速
  • 1920x1280の画像を1000回
    • accurate: 54.1
    • not accurate: 51.268
      • 105%高速

うーん.
大きくなってくるとそんなに劇的な変化は無いですね.
気持ち速い, くらい.
小さいファイルを大量に読み込むときは50%くらい速くなるって考えるとそこそこ?

ちなみにデフォは全部falseなので速い方です.
「jpegで作ったテクスチャが汚いぞ?」とか「背景に綺麗な夕焼けの写真を敷きたいのにジャギが気になるぞ?」って思った場合はお試しください.
load時の設定だけでそれ以降は速度に影響無いはずです.

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9