プチコン3号が発売当初、私もたらこさんと同じように表示の色コードとGSPOITで取得した色コードの不一致でハマった覚えがあります。
その後で試行錯誤の上「R、G、Bの値が8の倍数値で丸められる」と気づいて解決することができました。
しかし、この8の倍数値で丸められるためグラデーション表示を行った場合にはどうしても縞模様が見えてしまいます。
せめてグレー(白黒)だけでもきれいなグラデーションで表示してみたいという思いから作ったのがこのGRAY関数なのです。
ちなみにこのGRAY関数は私が初めて作った自作関数でもあります。
DEF GRAY(GR)
RETURN RGB(GR+(GR MOD 4>1)*8,GR+(GR MOD 8>3)*8,GR+(GR MOD 2)*8)
END
※初出時はもっと長かったけどそれを短縮したver.2.0のプログラムリストです。
このGRAY関数は0〜255の範囲で輝度を引数で記述することでその輝度のグレーの色コードを返します。この色コードを使って表示を行えば擬似的な256階調を実現できます。
このGRAY関数の動作の仕組みについては大ざっぱに言えばこういちさんが書いた通りです。
もう少し詳しく書くと赤と緑と青は同じ強さでも輝度が異なるのです。
RGB均等なグレーだと8の倍数で丸められるため32段階でしか表示できないのですが、ちょっと赤味のあるグレー、ちょっと緑味のあるグレー、ちょっと青味のあるグレーなどの「わずかに色がついたグレー」を間に7種類挟みそれを輝度順になるよう計算して行えば擬似的に256階調の表示が可能になるというわけです。
誤差拡散やタイルパターンを使用した擬似階調とは異なり、この方法であれば1ドット単位で擬似256階調が表現できるためプチコン3号で階調の優れたモノクロ表示を行いたいのであればぜひ使ってみてください。
ちなみにGRAY関数は、私が作ったプチコン3号本「プチコン3号自作関数完全マニュアル」でさらに詳しい解説を行っています。
http://petitverse.hosiken.jp/community/petitcom/topic/?read=897