返信先: インポートできない

AniLaPaint ver 1.7.4 フォーラム バグ報告掲示板 インポートできない 返信先: インポートできない

#2359
小野木一樹
キーマスター

スキャン画像をいろいろなサイズにして試してみました。

■ 訂正

>おそらく、 SIMD 演算時にアライメント違反でインポート処理ウィンドウ
>自体がクラッシュしてしまうバグのようです。

この予測は間違っていました。横幅を 8n+a (a=1~7) で試してもクラッシュすることはありませんでした。なので原因は別にあります。

■ 小さい画像をインポートした時に起こるクラッシュについて

スキャン画像のサイズを 10 pixel ずつ小さくしていってテストした結果。インポート自体は 200 x 112 pixel でも問題なく実行されることが分かりました。

しかし、500 x 281 pixel 未満の場合、インポートは成功しても、カット・パネルのサムネイル作成処理でクラッシュしてメインウィンドウが落ちます。自動再起動を行いますが、再起動中に再びクラッシュし、以降は Windows のスタートメニューから AniLaPaint を実行してもクラッシュして立ち上がらなくなります。

この状況に陥った場合の対処方法は、問題を起こしたカットフォルダーを削除することです。再び起動できるようになります。

画像サイズが小さい場合、横 500 ~ 630 pixel の場合でもサムネイルが変形していたりするので異常の予兆が現れています。

結局、元々サポートを謳っている SD サイズ (640 x 480 pixel) 以上でないと正常に機能しないということが言えます。

次のバージョンアップで、SD サイズ (640 x 480 pixel) 未満の画像は、そもそもインポートできないようにします。

■ 大きい画像をインポートした時に起こるバグについて

次に、大きい画像をインポートした場合にどうなるかをテストしてみました。ただ、こちらは、環境依存が多く作用するものでして、筆者の環境は開発環境のためメモリーが比較的十分にある状態でのテストです。具体的には、 Windows 10 Pro 64bit OS 上でメインメモリー 16 GB の場合でのテスト結果です。また、最大 8 スレッドの CPU を使用し、インポート処理には 7 スレッドをあてがった場合のテストになります。

まず、 Free 版の場合、 2560 × 2560 pixel が最大なので、サンプルのスキャン画像の横幅を 2560 pixel に拡大してインポートしてみました。その結果、インポート中のメモリー使用量は、最大で 20 % ほどで、メモリー不足になる瞬間はありませんでした。何ら問題なくすべての画像が正常にインポートできました。

つまり、 64 bit OS であり、インポート時に OS の空きメモリーサイズが 4GB 以上残っていて 7 スレッド同時実行の場合には、誰のマシンでも同じ結果になると思います。

次に、シェアウェア版の場合、 8192 × 8192 pixel が最大なので、サンプルのスキャン画像の横幅を 8192 pixel に拡大してテストしてみました。その結果、インポート中の画面に表示される最大のメモリー使用量は、最大で 94% でしたが、いくつかの画像がメモリー不足のためインポートできませんでした。

32bit アプリケーションなので、プロセス単位で 4GB が最大のメモリーサイズになりますが、 AniLaPaint 自体もメモリーを消費するので、最大で 3.6 GB 程度までしかインポート処理に使えません。それなのに、 7 スレッドも並列処理すれば、 1 スレッド当たり、 0.5 GB 程度しか使えないので、スレッド間のメモリ争奪戦に負ければインポートが失敗します。これは仕様です。

その時のメッセージは以下の通りです。
————-
A・8 : 実線画像作成処理中にエラーが発生しました。例外が発生しました
対象 : A・8
原因 : メモリが不足しています。
場所 : src\dialog\import\data\importdata_anl.cpp (231)
————-
A・7 : 彩色画像作成処理中にエラーが発生しました。例外が発生しました
対象 : A・7
原因 : FailedCreateBitmap
場所 : src\dialog\import\data\importdata_anp.cpp (228)
————-
A・14 : 彩色画像作成処理中にエラーが発生しました。例外が発生しました
対象 : A・14
原因 : DIBSectionIsNull
場所 : src\dialog\import\data\importdata_anp.cpp (228)
————-
どれも、メモリー不足に陥った場合に出力されるエラーです。

長くなったので、次の投稿につづきます。