saitoha / libsixel

A SIXEL encoder/decoder implementation derived from kmiya's sixel (https://github.com/saitoha/sixel).
MIT License
2.49k stars 83 forks source link

img2sixel で stb_image を使用すると http://www.schaik.com/pngsuite/basn0g01.png が正しく表示されない #37

Open msmhrt opened 9 years ago

msmhrt commented 9 years ago

【概要】 img2sixel で stb_image を使用すると http://www.schaik.com/pngsuite/basn0g01.png が正しく表示されない

【発生環境】 OS: Ubuntu 14.04.2 LTS (amd64) Terminal: mlterm version 3.4.3 post/2015-02-22

【詳細】 master ブランチ( https://github.com/saitoha/libsixel/commit/7efd9a4bb4f95d7842fe7cec3b9cf8f48f009804 ) 及び fixfix-issue-34 ブランチ( https://github.com/saitoha/libsixel/commit/91cf0c45d6dcaec97afdf4b49db5775ba5b77916 ) で stb_image を使って http://www.schaik.com/pngsuite/basn0g01.png を表示すると下記の画像が表示されます。 fail

libpng を使った場合は正常な画像が表示されます。

develop ブランチ( https://github.com/saitoha/libsixel/commit/e953d9cd19f7e9416565ed7af12722133ab544fb ) では stb_image を使った場合も問題ありませんでした。

saitoha commented 9 years ago

実は1.4系で使用しているstb_image v1.41 は本来1/2/4bpp PNGが読めなくて、#1 をはじめとするいくつかのコミットで無理矢理1/4bpp対応した、という経緯がありました。(だから2bppは読めないはず) developではstb_image v2.0 を使用しているので、読めます。

このあたりのPRを1.4系にポートしてくることを考えています。 https://github.com/nothings/stb/pull/45/files

saitoha commented 9 years ago

やはりこのままstb_imageの2つのカスタマイズバージョン(animated GIF対応とかも入っている)を保守し続けるのはつらいので、v2.02に上げる方向の修正をしてみました。(4572316)

msmhrt commented 9 years ago

次のリリースを develop ブランチから透過色関係と背景色関係を抜いた 1.5.0 にできるのであれば、それが良いような気もするのですが、難しいですよね。

stb_image を v2.02 にすると対応フォーマットが変わる(んですよね?)ので、ドキュメントの方もよろしくお願いします。

saitoha commented 9 years ago

@msmhrt ええ、v1.5はピクセルフォーマットの追加やimg2sixelでやっていたことをコアにもってくるなどの大きめの修正が入っています。 ドキュメントの修正も同時にリリースしようと思います。ご指摘ありがとうございます。

msmhrt commented 9 years ago

hotfix-issue-37 ブランチ ( https://github.com/saitoha/libsixel/commit/45723162519551fbdf92a7416f2a625f7fc3a637 ) で --without-png した時に http://www.schaik.com/pngsuite/f99n0g04.png で下記の壊れた画像が表示されました。 issue-37

develop ブランチ ( https://github.com/saitoha/libsixel/commit/e953d9cd19f7e9416565ed7af12722133ab544fb ) でも同様の画像になるようです。

saitoha commented 9 years ago

catchありがとうございます。 スキャンラインごとに異なるフィルタタイプをもつPNGは、もともとstb_imageでは非対応だったようです。 まずはどのくらいの修正規模になるかを検討して、相当面倒な話だったらwontfixでドキュメントのみの対応、いけそうであれば修正後、本家にパッチを提出してみるという流れになると思います。

msmhrt commented 9 years ago

なるほど、元々 stb_image で表示できない画像だったということですね。

壊れた画像が表示されるというのは何となく不安なので、いっそ全く表示されない方が安心できるかもしれません。(笑)

saitoha commented 9 years ago

「スキャンラインごとに異なるフィルタタイプをもつ」という時点で相当意地が悪いと思うので、あまり心配しなくてもいいかなという気はしています。 stb_imageのもともとの理念としては、ゲームで組み込みのテクスチャを読ませるなどの用途を想定していて、こういうのを本家の方に対応して下さいとはちょっと言い辛い感じなんですよね。

msmhrt commented 9 years ago

なるほど、本来想定されていた用途はそういう用途だったんですね。

PngSuite のチェックサムが壊れた画像を表示できる理由が何となく分かった気がします。

ひょっとすると壊れた画像を表示する位なら何も表示しないで欲しいという要望の方が通りやすいかもしれませんね。