こんにちは、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/