mieki256's diary



2015/08/27(木) [n年前の日記]

#1 [dxruby] DXRubyのImage.load_tilesの不具合

DXRuby の Image.load_tiles を使っていたのだけど、もしかすると不具合に遭遇したかもと思えてきたので一応メモ。

ちなみに、Image.load_tiles というのは、タイル状に並んだ画像を一枚読み込んで、ソレを指定個数で分割して画像として持てる、みたいな機能。というかメソッド。

症状としては、Image.load_tiles で大きな画像を読み込むと不正終了してしまう、みたいな感じ。例えば、394x406ドットのpng画像を32枚、横一列に並べて、12608 x 406ドットの画像を作って読み込ませてみたら不正終了してしまったわけで。

もしかして4096とか8192とかの制限があるのかなと思えてきたので、4096ドットや8192ドットを超えた時は横一列に並べるのをやめて縦方向も使って並べた画像にしてみたり。つまり、横にめちゃくちゃ長い画像じゃなくて、できるだけ正方形に近い画像を読み込ませて分割させてみたらどうなるかと。…これだと不正終了しない。

と思ったけど、そういった感じの画像を、おおよそ90ファイル前後読ませてみたら、また不正終了。

ちなみに、画像をバラバラにして、Image.load で1枚1枚読み込ませたら不正終了しなかった。 *1

件のメソッドには画像サイズ等に関して何か制限か仕様があるんじゃないかとドキュメントを眺めてみたけど、それらしい記述は見つからず。まあ、こんなに巨大な画像を大量に読み込むことは想定してない、そんな予感も…。
*1: というか今までそういうやり方で処理していたのだけど。

この記事へのツッコミ

Re: DXRubyのImage.load_tilesの不具合 by 土屋つかさ    2015/09/09 13:05
はじめまして。以前自分が遭遇したケースと似ているかもしれません。その時はそういうものだろうと思い実装の方で回避しました。
http://d.hatena.ne.jp/t_tutiya/touch/20131108/1383871461
参考になればー。
Re: DXRubyのImage.load_tilesの不具合 by mieki256    2015/09/10 00:52
情報ありがとうございます。紹介していただいた記事、参考になりました。
load_tilesはメインメモリで画像分割してるものと思い込んでましたが
一旦VRAMに渡してそこで画像分割してる、からVRAM容量を超えると落ちるのかしらん…。
となると、ビデオカードがどの程度のメモリを持ってるか・扱えるかで、
load_tilesで強制終了したりしなかったりする場合もありそうですね…
何にしても画像サイズを小さくしないとマズイなあ…
Re: DXRubyのImage.load_tilesの不具合 by 土屋つかさ    2015/09/10 10:14
ひさしぶりに自分の書いた記事を読んでいて「でもなんで8192で区切ってるんだろう」と思ったのですが、生成時に弾いていました。
https://osdn.jp/projects/dxruby/scm/svn/commits/402
確か、DirectXの画像データ作成限界とかだったかと思います。

以上です。

過去ログ表示

Prev - 2015/08 - 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