LAST UPDATE 1998/08/01


『 その7-6 』


 ■ 16進数(実は便利)

 プログラミングを始めたばかりの人にとって16進数は、最大のライバルのひとつであると思う。ほぼ間違いなく16進数は嫌われ者であろう。しかし、プログラミング時にはときどき16進数でないとかえってわかりにくい数値というものも存在する。それは例えば色である。CGの世界では大抵色をRGBで表す。WindowsではRGBをそれぞれ0~255の256階調で表して、数値化して色の指定をする。例えば
    B=0   G=255 R=255 → 黄色
    B=127 G=127 R=127 → 灰色
などで、それぞれ数値化された色は
    黄色=65535
    灰色=8355711
である。しかし、これらの数値を4桁の16進数(Long型)で表すと
    黄色=&H0000FFFF
    灰色=&H007F7F7F
になる。最上位の2桁は未使用、次の2桁が青成分を表し、次が緑、最下位の2桁は赤成分を表し、それぞれ&H00~&HFFの幅を持っている。このように16進数を使って表したほうが圧倒的にわかりやすい場合もある。



 ■ 16進数(色の計算方法)

 いままで説明してきたことは、ある程度知識のある人にとっては、あまりにもあたりまえであった。しかしここで説明することは、VB上でハマリになりがちな事なので、まじめに読んでほしい。
 色を数値で表すには16進数6桁必要である。例えば 暗い青を表す場合には
    B=100   G=0      R=0
16進数で表すと
    B=&H64  G=&H00  R=&H00
 カラーコードは&H640000である。これを計算するにはBの成分を4桁左にスライドし、Gを2桁スライドして3つの成分を加算する。16進数で表記された数値は16倍すると1桁左にスライドするので、4桁ということは
    16×16×16×16=65536倍
    65536=&H10000倍
すれば良い。同様にGは2桁スライドだから &H100倍してやれば良いことになる。 数式で示すと
    色=B×&H10000+G×&H100+R
ということになる。



 ■ 16進数(注意事項)

 さて、実際のコードであるが注意が必要になる。
    Public C& もしくは Dim C&
というように変数を定義する。そこで下のようにコーディングする。
    C = &HFF * 65536 + &HFF * 256 + &HFF
 このコードはオーバーフローエラーが出てしまうのである。この式では &HFF * 256 の部分が問題なのだ。VBは何も指定していない数値は Integer型 として扱われる。この計算に出てくる数値の &HFF256も Integer型 の範囲内で収まるのでVBはこの計算を Integer型 で行ってしまうのである。この部分の計算結果は
    &HFF00=65280
なので、Integer型の数値の範囲である-32768~32767の範囲に収まらないのでエラーになってしまうのである。ところが
    &HFF * 65536
の部分は、65536が既にInteger型の範囲内に収まらないので、最初からLong型で計算されエラーにならないのである。こういった問題を避けるために、上にある色の計算式は
    C = &HFF& * 65536 + &HFF& * 256 + &HFF&
にする。数値の後に&をつけるとLong型であるとVBに通知することができるので、オーバーフローは起こらない。内部的に厳密に書くと
    &HFF  =&H00FF
    &HFF& =&H000000FF
というように違った意味になるので注意が必要である。






その7-1 | その7-2 | その7-3 | その7-4 | その7-5 | その7-6

『 サルのゲーム製作講座 』 目次 | その 1 | その 2 | その 3 | その 4 |
その 5 | その 6 | その 7 | その 8 | その 9 | その 10 | その 11


もどる

e-mail: sc_3da@magical2.egg.or.jp