こんにちは。
シュンスケです
前回からかなり間が空いてしまいましたが、引き続き減色の話です。
前回は、変換元のファイルを読み込んで、何か加工を行って出力するという
ところまで作成しました。そこで、いよいよ加工部分に何か書いてみます
そもそもの発端は、16bitカラーへの減色ですので、単純に切り捨てで減色してみましょう。
前回の
// テスト的に半透明にしてみる
a = 128;
を消して、以下の処理を追加します。
r = (r >> 4) << 4;
g = (g >> 4) << 4;
b = (b >> 4) << 4;
a = (a >> 4) << 4;
その結果作成されたのが、↓です。
実際に、例えばUnity等の減色機能のあるもので結果を比較してみましょう。
左が今回生成した画像で、右がフルカラーの元画像をUnityの設定で減色したものです。
うーん、微妙にズレてますね。
今回の処理で実際に色値がどうなるか考えてみましょう。
全チャンネル同じ処理なので、1チャンネルぶんで考えます。
0~255の256段階を16段階にする際、切り捨てを行いましたので、
0~15 → 0
16~31 → 16
32~47 → 32
48~63 → 48
:
:
240~255 → 240
こんな感じになります。
おっと、これでは真っ白が表現出来ません。道理で少しずつズレるわけですね
ちゃんと、0~255の範囲を維持したまま、色を選ぶ必要がありそうです。
というわけで、今回はここまでです。
では