カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2017年06月16日(金)

libpng + APNG パッチ、高さ 1 のフレームを含めると落ちる不具合修正

ドロー系のお絵描きソフト、 ストローク で作成した 2 枚の画像から
アニメーションを生成するソフトのテスト、デバッグ中です。

今日は、画像の高さが 1 のフレームを含む
アニメーション PNG を保存するときに落ちる不具合を修正しました。

保存には、libpng っていうライブラリーに、
アニメーション PNG を保存するためのパッチ をあてたものを
利用させていただいているのですが、途中に画像の高さが 1 の
フレームを含めると落ちるみたいです。
(libpng のバージョンは 1.6.29)

どこに不具合があるかは完全には特定できていないのですが
たぶん、全フレームの画像の高さが 1 とかなら落ちません。

たぶんですが、png_structp 構造体の prev_row
を png_calloc する部分が、画像の高さが 1 の場合には
スキップされるのですが、前のフレームの
prev_row ポインターが残っていて、結果的に
何やら不正な処理が走ってるみたいです。
(勘では、free による 2 重開放じゃないかと思う)

で、とりあえず、フレームの画像保存前に、
prev_row をチェックして、NULL じゃなかったら、
png_free してから NULL にしておくと直りました。

prev_row は、最初のフレームでは常に NULL なので
マルチフレームでなければ、問題なさそうです。

・・・

ま、気になる方は、とりあえず
ストロークでもお試しください。

ストロークループアニメーターのアイコン作成にも使用したので、
実用は可能なはずですよ。

最新版は、こちらのページからダウンロードできます

ちなみに、ストロークループアニメーターで、
中間フレーム数を 677 枚にしたら発現しました。

何故、677 枚だったかというと、
画像の中間フレームを 677 枚にしたときに、
1 フレーム間の動きがあまりにも小さくなって、
前のフレームと全く同じフレームが生成されはじめたからです。

で、前と全く同じ画像だからといって、空っぽの画像も
保存できなさそうだったので、かわりに、
1 x 1 の画像を保存すると、条件を満たしたわけですな。

まぁ、そんなにたくさんの中間フレームを生成することは
無いと思いますけど、こういう極端な値でテストすると
いろいろと不具合が見つかるので、品質を高めるためには有効です。

ストローク
ストローク ダウンロード
ストローク サンプル画像
ストローク 更新履歴
ご意見・ご要望連絡窓口


コメント
コメントする