次の方式で画素にメモリを割り当てる640×480のグラフィックLCDモジュールがある。
始点(5,4)から終点(9,8)まで直線を描画するとき,直線上のx=7の画素に割り当てられたメモリのアドレスの先頭は何番地か。
ここで,画素の座標は(x,y)で表すものとする。
〔方式〕
・メモリは0番地から昇順に使用する。
・1画素は16ビットとする。
・座標(0,0)から座標(639,479)までメモリを連続して割り当てる。
・各画素は,x=0からx軸の方向にメモリを割り当てていく。
・x=639の次はx=0とし,yを1増やす。
正答3
解説
正解は3です。
図では、始点(5,4)から終点(9,8)まで、x座標とy座標が1ずつ増える斜めの直線が描かれています。
直線上の画素は(5,4)、(6,5)、(7,6)、(8,7)、(9,8)なので、x=7の画素は(7,6)です。
メモリは1行640画素ずつ、(0,0)から横方向に連続して割り当てられ、1画素は16ビット=2バイト(2番地分)です。
【計算】
(7,6)より前にある画素数=6行×640画素+7画素です。
画素数=3840+7=3847画素です。
1画素は2番地分なので、先頭アドレス=3847×2=7694番地です。
【選択肢別解説】
1:× 3847は、(7,6)より前にある画素数です。
1画素が2番地分を使うことを掛けていません。
2:× 7680は、y=6の行の先頭である(0,6)の先頭アドレスです。
x=7の分の14番地が足されていません。
3:○ 前にある3847画素に2番地を掛けた7694番地が、(7,6)の画素の先頭アドレスです。
4:× 8978は、(9,7)の画素の先頭アドレス((7×640+9)×2)にあたり、x=7の画素ではありません。
【ポイント】
2次元の座標をメモリのアドレスに変換するときは、(y×横の画素数+x)×1画素のバイト数で求めます。
図のメモリは1番地が8ビットなので、16ビットの画素は2番地分を占めます。