4.6 YJK方式を解剖する 4.6.1 テレビ放送とYJK方式  MSX2+の自然画モードには、従来のRGB方式に代わってYJK方式が使われている。このYJK方式は、カラーテレビ放送の信号に似ている。  この本の読者の多くは知らないかもしれないけれど、昔のテレビ放送は白黒で、当然すべてのテレビ受信機は白黒受信機だった。その後カラー放送をはじめるときに、ふたつのことが問題になった。カラー放送をRGB(赤緑青)の3色に分解して放送すると、3つのチャンネルをつかってしまう。そして、白黒受信機でもカラー放送を受信できる必要がある。  そこで、人間の目の性質が利用された。網膜は、明るさを感じる細胞と色を感じる細胞を持っている。明るさを感じる細胞の数が多く、色を感じる細胞の数が少ないので、人間の目は色の変化に鈍感なのだ。  カラーテレビ放送では、"輝度"を表わすY信号と"色相"を表わすUV信号の組み合わせで、色が表わされている。人の目が色の変化に鈍感なことを利用すると、YUV信号をまとめて送れる。また、輝度を表わすY信号は白黒放送の信号と同じなので、白黒受信機でカラー放送を見ると、Y信号だけが表示され、正常な白黒画面に見えるわけだ。  このようにテレビでは、電波の量(つまりチャンネル数)を増やさずにカラー画面を放送するために、YUV方式が使われた。一方、MSX2+では、ビデオRAMを増やさずに色数を増やすために、YUV方式に似たYJK方式が使われる。 4.6.2 RGB方式とYJK方式のデータ構造 RGB方式(SCREEN 8)  SCREEN 8では、R、G、Bの明るさをそれぞれ3、3、2ビットで表わし、1ドットごとに256色中の任意の色を表示できる。 YJK方式(SCREEN 12)  SCREEN 12では、横4ドットを1組みとするYJK方式が使われる。図4.6のY0からY3までは、各ドットの明るさを5ビット(つまり32諧調)で、KとJは4ドット全体の色相を12ビット(4096色)で表わす。YJK方式のデータをRGB方式に変換する方法は次の通りだ。 R = Y + J G = Y + K B = 1.25Y - 0.5J - 0.25K  ただし、Yの値は0から31まで。JとKの値は-32から31までだ。上の式で計算したR、G、Bの値が0よりも小さくなれば、その値の代わりに0が出力され、同様に31よりも大きくなれば、31が出力される。このような処理を、"0から31にクリッピングする"という。  たとえば、次にあげた4ばいとのデータは、Y=0、J=K=-32で黒を表わすことがわかるかな。電卓片手に計算してみよう。 b7 b6 b5 b4 b3 | b2 b1 b0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 1 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 0 | 1 0 0  これとは逆に、RGBのデータをYJKのデータへと変換することを考えてみよう。つまり、RGBへの変換を3元連立1次方程式とみなし、これをY、J、Kについてそれぞれ解けばいいわけだ。高校の"代数・幾何"レベルの問題だぞ。答えは次にあげた3つの式。ちゃんとできたかな。 Y = ( 2R + G + 4B ) / 8 J = ( 6R - G - 4B ) / 8 K = ( -2R + 7G - 4B ) / 8