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