色味の謎

以前からFreeNoteを使っていてどうも気になることがあります。
それは、ザウルスで見た色とPCで見た色が異なるということです。
前バージョンから、色選択画面を一新したため、選択色のRGBが表示されるようになりました。
この画面、プログラム的な話をすると、画面をタッチした際の表示色を拾うという処理をしています。
それで気付いたのですが、どうやらこのマシンでは画面に表示する際に輝度が落ちる*1ようです。
リナザウの色数は65536色ですので、光の三原色の情報量はそれぞれR,Bが5bit、Gが6bitです。
つまりR,Bは0-31、Gは0-63の値を取り、これを単純にフルカラーに換算させるとR,Bは3bit->8倍、Gは2bit->4倍すればよいことになります。
ここでの問題はR,Bの最大輝度31を8倍してもフルカラーの最大輝度255にならないという点で、それぞれの最大値はR,Bが248、Gが252と私が色選択画面で遭遇した現象と一致します。


さて、色の謎が分かったところで、これがどのような不具合をもたらすかというと、
例えばPCで作成した真っ白の情報を読み込んで画面に表示した後、表示した画面からそのままフルカラーで書き出すと、緑がかった白→*2になります。
これは単純に読込み->表示->保存しただけで輝度が落ち、色味が変わることを意味します。
これを正常にするためには、保存する前にそれぞれの輝度を65536色換算し、以下の式で補完する必要があるのではと思います*3

65536色換算時の色要素の値をvとすると
R,Bの場合は、
f(v) = v * 8 + (int)(7 * (double)v / 32.0)

Gの場合は、
f(v) = v * 4 + (int)(3 * (double)v / 64.0)

また、画面の明るさのため、実際の色情報よりも明るく見えている場合がありますので、画面から取得した色で描画している場合も上記の式等を用いて保存前に換算してやると良いのではないでしょーか。
ちゅーことで、次期バージョンには、色補正オプションを入れてみるかな?

*1:正確にはR,Bが255->248, Gが255->252となります

*2:この文字の色

*3:ただし、一度も画面に表示せずに内部で処理したばあいは問題ないっぽいです