2017年5月15日月曜日

俺の画像フォルダが火を噴くぜ!


 マイコンで画像を扱ってみたかったので、とりあえず1ピクセルあたり何ビット必用なのかを確かめようと、任意のビット数で画像を表示するアプリを作ってみた。C#だと簡単に作れて便利。この規模ならヘタすると探すより作ったほうが早い。ネット回線がアホみたいに遅い田舎だと特に。
 左側は変換後の画像を表示し、右側には変換後の画像と元の画像を並べて表示している。
 画像の変換には単純な切り捨てを使用している。たぶんマイコンだと下位ビットで四捨五入とかしてる余裕ないだろうなーと思ったので。

 1byte/pxだとRGB242になるけど、さすがに劣化が多い。
 2byte/pxのRGB565だと、比較画面で領域を動かしながらちゃんと見比べないとわからない程度の劣化。劣化と言うか、切り捨てのために輝度が下がってるので、明暗で違いがわかりやすい。うまいアルゴリズムで端折るとかなり優秀かも。
 1.5byte/pxのRGB444だと、さすがに等倍で見れば劣化が目立つ。あと1.5バイトだと3byte/2pxとかで扱うんだろうけどワードアライメント的につらそう。でもuint8_t[3n]の配列ならアライメントとか気にしなくていいかな?

 マイコンの処理内容によっては、IndexedColorのほうが良いかも。1ピクセル1バイトで256色のカラーパレットでも意外とちゃんと見えたりするし。8bitIndexedビットマップなら読み込みは単純にファイルリードで読めそうだし。


 色変換だと画像の内容やグラデーション具合でだいぶ感想が変わるはずなのだけど、どういう画像を使えば良いんだろうか。実際に使う画像があればソレで確認するのが一番だろうけど、そもそもどんな画像を写すかも全く決めてないので。。。

0 件のコメント:

コメントを投稿