Sunday, December 2, 2012

プチコンでサブピクセルレンダリング?

プチコンでサブピクセルレンダリングと題しましたが、たいしたことはなく、サブピクセルを利用して小さな文字を表示してみるテストです。

DSiの上画面

サブピクセレンダリングとは、おおざっぱにいうと、1ピクセルを構成するRGBをそれぞれ1ピクセルに見立てて、画面を描画することです。

サブピクセルレンダリングの利用例として、MacOS8.5とかClearTypeだとかで、液晶ディスプレイ上でのみ文字がキレイにみえるようにする、特殊なアンチエイリアシングのような技術があります。今でもMacOSXなど各種OSでの表示やテレビなどにも利用されているようです。

次は拡大画面。
文字部分の拡大
"ABCabc123%"という文字が上に横方向に縮小されて表示されます。フォントは、その下に表示されているプチコンのフォントをそのまま使っています。
変な色ですが、なんとか文字が読めるのではないでしょうか。

DSiの液晶は(少なくとも家にあるDSiは)、液晶の1ピクセルにサブピクセルが3つB,G,Rの順番に並んでいます。2つ目の画像を拡大すると見えるかもしれません。(蛇足ながら、B,G,RはBlue,Green,Redの略です)

プログラムでは、プチコンのフォントを読み取り、フォント定義の各ピクセルについて、1サブピクセルを使う様にパレットを定義し、GPSETしています。

例えば、"A"のフォントの1列目は"000F0000"なので、大文字を点灯、小文字を消灯とすると"bgrBgrbgr"となります。"bgr〜"が9個あるのは1ピクセルが3サブピクセル(BGR)で構成されており、8ピクセルの表現に3ピクセル=9サブピクセル必要なためです。

ただ今のプログラムでは制約がきつく、1ピクセルに1パレット割り当てるため、10文字を表現するのが上限です。(1文字あたり3列*8行=24ピクセル必要なので、FLOOR(256/24)=10(文字))

表示を割り切れば、所詮BGR3ビットの組み合わせなので、8パレットを使うと好きなだけ表示が可能になると思います。計算では FLOOR(256/3)=85 となるので、プチコン画面でMSXのSCREEN0,6,7が(変な色で)再現できるかもしれません。

自分のプチコンで見てみたいという物好きな人がいるかもしれませんので、QRコードです。

No comments:

Post a Comment