[OSASK 6543] Re: FORM: 32bit グラフィックボックスの使い方

 こんにちは、I.Tak.です。ベイサイドさんに返信です。

From: FORM-Akkie <akkiesoft !Atmark! yahoo.co.jp>
Subject: [OSASK 6542] FORM: 32bit グラフィックボックスの使い方
Date: Wed, 08 Oct 2003 09:06:28 +0900

> 32bitグラフィックボックスに点を打とうとしています。
> WorkFrameには5-5-5の色情報が入っているらしく、
> これを8-8-8に変換して渡そうと思い、以下のような
> コードを書きましたが、ほとんど真っ黒になってしまいました。
> 何かうまい方法があったら教えてください。

>        p->i = 0;
>        p->blue  = (rgb & 0x1F);
>        p->green = (rgb & 0x3E0)/0x1F;
>        p->red   = (rgb & 0x7C00)/0x3FF;
>        p++;

 blueを例にあげると、rgb & 0x1F は 0から31 の値をとります。
フルカラーの各要素は 0から255 ですから、暗くなるのは当然です。
あと割り算をすると遅くなりますから (1<<n で割るときは最適化して
くれるのかな? これは1<<nで割ってはいませんが)、シフトを使うべき
でしょう。
 というわけでこんな感じにしたらちゃんとなるかと。
        p->blue  = (rgb & 0x1F)<<3;
        p->green = (rgb & 0x3E0)>>2;
        p->red   = (rgb & 0x7C00)>>7;
p->i = 0; とするよりは red の後に reserved を入れてそこに0を代入
するする方がいいかも知れません (分かりやすさとかで)。

 しかし16bitグラフィックボックスを使えば
        unsigned short tmp, *p;
        tmp = rgb & 0xffe0;
        *p = rgb + tmp;      /* redとgreenを左1bitシフト */
で済んでしまうんですけどね。
NESということはエミュレータの移植ですか?

I.Tak. <g240845 !Atmark! mail.ecc.u-tokyo.ac.jp>
http://user.ecc.u-tokyo.ac.jp/~g240845/

ML番号でジャンプ
ML単語検索