令和4年度 春期 応用情報技術者試験 午前 問題 問21

次の方式で画素にメモリを割り当てる 640×480のグラフィックLCDモジュールがある。始点 (5, 4) から終点 (9, 8) まで直線を描画するとき, 直線上の x=7x=7 の画素に割り当てられたメモリのアドレスの先頭は何番地か。ここで, 画素の座標は (x,y)(x, y) で表すものとする。

〔方式〕

  • メモリは 0番地から昇順に使用する。
  • 1画素は 16ビットとする。
  • 座標 (0, 0) から座標 (639, 479) までメモリを連続して割り当てる。
  • 各画素は, x=0x=0 から x軸の方向にメモリを割り当てていく。
  • x=639x=639 の次は x=0x=0 とし, yを 1増やす。
メモリのアドレスと画面の画素座標(x, y)の対応関係を示す模式図
図の説明テキスト

メモリのアドレスと画面の画素座標(x, y)の対応関係を示す模式図。
左側には「メモリ」として上から「0番地」「1番地」「2番地」「3番地」から「z番地」までの箱が積まれており、メモリの幅が「8ビット」であることが下部の矢印で示されている。
右側には、右方向にx軸(0から639まで)、下方向にy軸(0から479まで)が伸びており、画素を表す円が格子状に敷き詰められている。
メモリの「0番地」と「1番地」の2つから括弧状の線が伸びて(x=0, y=0)の画素を指し、「2番地」と「3番地」から(x=1, y=0)の画素を指している。
格子の中央付近で、座標(x=5, y=4)の画素が黒く塗られて「始点」と引き出し線で示され、(x=9, y=8)の画素が「終点」として示されている。また、始点から終点まで斜めに直線を描画するように連続する画素が黒く塗られている。

解答・解説

正解: ウ. 7694

画素の座標とアドレスの関係

設問の条件と図表から、画素の座標 (x,y)(x, y) に割り当てられるメモリのアドレスを計算する式を導きます。

  1. 1画素あたりのメモリ量
    • 〔方式〕より、1画素は 16ビット です。
    • 図表より、メモリは1番地あたり 8ビット です。
    • したがって、1画素につきメモリを 16÷8=216 \div 8 = 2 番地分使用します。図表でも、座標 (0,0)(0, 0) に対して「0番地」と「1番地」の2つが割り当てられていることが確認できます。
  2. 座標 (x,y)(x, y) までの画素数
    • 画面の横幅は 640640 画素(x=0∼639x=0 \sim 639)です。
    • yy 座標が 1 増えるごとに、640640 個の画素が存在します。
    • したがって、座標 (x,y)(x, y) は、先頭から数えて (640×y+x)(640 \times y + x) 番目の画素となります(0番目からカウント)。
  3. アドレスの計算式
    • 1画素あたり 2番地を使用するため、座標 (x,y)(x, y) の画素に割り当てられるメモリの先頭アドレスは以下の式で求められます。
      先頭アドレス=(640×y+x)×2 \text{先頭アドレス} = (640 \times y + x) \times 2

対象の画素座標の特定

始点 (5,4)(5, 4) から終点 (9,8)(9, 8) へ直線を描画します。
図表を見ると、始点から終点まで斜めに黒い画素が連続して描かれています。xx 座標が 1 増えるごとに yy 座標も 1 増えていることがわかります。
したがって、直線上の x=7x=7 のときの yy 座標は、始点の x=5,y=4x=5, y=4 から xx が 22 増えるため、yy も 22 増えて y=6y=6 となります。
求める画素の座標は (7,6)(7, 6) です。

アドレスの計算

求めた座標 (7,6)(7, 6) を計算式に当てはめます。

  • 座標 (7,6)(7, 6) までの画素の数は、(640×6)+7=3840+7=3847(640 \times 6) + 7 = 3840 + 7 = 3847 個目
  • 1画素あたり 2番地を使用するため、先頭アドレスは 3847×2=76943847 \times 2 = 7694 番地

よって、正解は ウ の 7694 です。

各選択肢の解説

  • ア(3847): 誤り。座標 (7,6)(7, 6) までの画素数(インデックス)をそのままアドレスとして解答した値です。1画素あたり2番地を使用する(2倍する)処理が抜けています。
  • イ(7680): 誤り。y=6y=6 行目の先頭画素である (0,6)(0, 6) の先頭アドレスです。x=7x=7 分の加算が抜けています。
  • ウ(7694): 正解。
  • エ(8978): 誤り。座標 (9,7)(9, 7) の画素の先頭アドレスを計算した値((640×7+9)×2=8978(640 \times 7 + 9) \times 2 = 8978)です。直線上の座標を誤って求めた場合に該当します。

Spineチーム