先日案件で、色の選択にカラーピッカーのインターフェイスを実装することがあり、
Webセーフカラーの一覧画像からgetPixelで色の情報を取り出すようなものを作ったのですが
なぜか、セーフカラーではなく「#980032」とか微妙に違う値が取れる。


カラーマップとして使ってる元画像の色情報がそもそも違うのかなと思って見てみたけど問題なし。
実装でやらかしてるのかなーと思って調べたけどコチラも問題なし。

FLASHでパブリッシュして実行中の画面をキャプチャしてマップの色を調べると色が違う!
もちろん、画像のプロパティは「劣化なし」。「劣化なし」のはずなのに劣化してる!


原因は結局よくわかりませんでしたが、FLASHはパブリッシュ時にPNG32(PNG24)を
最適化して容量下げてくれる機能があるので、その圧縮過程で色情報が変わっちゃった気がします。
(もしかしてFlashCS4だけかも。)



256階調のうちの1の違いなので、注意して見ても
人間の目にはあまり感じられないくらいの色の違いかとは思いますが、
今回のようなカラーピッカーや、DisplacementMap、フォースマップなど、
カラー情報を値として利用する際には結構問題になるのではないでしょうか。

あとは、企業のロゴとかも気をつけたほうがよいですね。
色が微妙に違う!って怒られかねません。


ちなみにPNG8だと、ちゃんと正確な色情報を保持してくれているようだったので
今回はPNG8でカラーマップを作りました。
 

HTML5飯