次の方式で画素にメモリを割り当てる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増やす。
(図:メモリ番地と画素座標の対応図、始点(5,4)から終点(9,8)への直線を示す)
正答3
解説
正解は3です。
〔方式〕により、画素は(0,0)からx軸の方向へ順にメモリを割り当て、x=639の次は1行下のx=0に続きます。
図では、メモリは1番地が8ビットで、(0,0)の画素に0番地と1番地、(1,0)の画素に2番地と3番地が割り当てられています。
つまり、1画素(16ビット)に2番地分を使います。
また図では、始点(5,4)から右下へ斜めに(6,5)、(7,6)、(8,7)と進み、終点(9,8)までの画素が黒く塗られています。
したがって、直線上でx=7の画素は(7,6)です。
【計算】
(7,6)より前にある画素の数は、6行分の6×640=3840個と、同じ行のx=0〜6の7個を合わせた3847個です。
1画素に2番地を使うので、先頭番地は3847×2=7694番地です。
【選択肢別解説】
1:× 3847は(7,6)より前にある画素の数です。
1画素が2番地分(16ビット)を使うことを考慮していないため誤りです。
2:× 7680は6×640×2で、y=6の行の先頭である画素(0,6)の先頭番地です。
x=7の分の7×2=14番地を足していません。
3:○ 画素(7,6)の先頭番地は、3847×2=7694番地です。
4:× 8978は(7×640+9)×2で、画素(9,7)の先頭番地にあたります。
直線上でx=7の画素は(7,6)なので誤りです。
【ポイント】
画素の通し番号は「y×横の画素数+x」で求め、それに1画素あたりの番地数を掛けると先頭番地になります。
1画素16ビットは2バイトなので、1番地が8ビットなら2番地分を使うことに注意しましょう。