
絵を表示させてみよう -その3-
絵を表示させてみよう -その3-
ここまではV-RAMからV-RAMへのコピー&ペーストを扱ってきました。 次はとうとう本当に絵を表示させてみましょう。 256X64dotの表示モジュールの使用例です。
FROMに絵を登録して、表示してみよう
絵を表示させるためには、あらかじめBmpメモリ(RAMまたはFROM)に絵を登録しておく必要があります。 まず、下の絵を右クリックして「名前を付けて画像を保存」してください。
画像1
このビットイメージのサイズは256X64dotです。 ビットイメージを、「Macro操師」のイメージツールで、FROM0に書き込んでみてください。
書き込みが終わったら、次のプログラムを実行してみましょう。
プログラム17
Sub Start()
Cursor 0 , 0
Cls
SetFont 16X32
KanjiOn
CopyBmp from , 0 , 0 , 256 , 8 , 8 '・・・①
End Sub
絵が表示されましたか?
プログラムの仕組み
17-①は、
CopyBmp memory , segment , offset , width , height , y
でしたね。
ビットイメージはFROMに書き込まれているので、memoryはfromを選択します。 ただし、RAMに書き込んだ場合はmemoryをramにしてください。 segentとoffsetは、イメージリストのPage-Addressを見て決めます。 Pageは書き込んだメモリのページです。 今回はFROM0に書き込みましたので、Pageが0となります。 また、Addressが0になっていますよね。 つまりはFROMの一番最初ですので、segment、offsetともに0になります。 一方、仮にFROM1に書き込んで、Page-Addressが1-0であったとします。 そのとき、FROM1のaddressは0ですが、FROMトータルとしてみると10000&h(65536)となります。
従って
65536 / 256 = 256
となり、segmentは256、offsetは0です。 (ちなみにFROM2のaddress0ならば、FROMトータルでは20000&h(131072)となり、segmentは512、offsetは0です。)
width、heightは表示させたいサイズですから、それぞれ256、8としたということは、書き込んだビットイメージが全て表示されます。 yは登録してあるビットイメージの縦のサイズですから、この場合、8となります。
実は、もっと簡単な方法があるのです。 17-①を
CopyBmp Image0000
としてみてください。表示できたと思います。 登録してあるイメージサイズと表示させたいイメージサイズが等しい場合は、このように書いても差し支えありません。 でもこの方法では、以下のようなことができないのです。
下の絵を右クリックして「名前を付けて画像を保存」してください。
画像2
このビットイメージのサイズは512X192dotです。 ビットイメージを、イメージツールによってFROM0に書き込んでみてください。
プログラム18
Sub Start()
Cursor 0 , 0
Cls
SetFont 16X32
KanjiOn
CopyBmp from , 24 , 8 , 256 , 8 , 24 '・・・①
End Sub
「横:256→511 縦:8→15」と書かれた部分が表示されましたか? プログラム17とはCopyBmpの部分(18-①)以外は共通しています。
18-①の説明をします。
CopyBmp memory , segment , offset , width , height ,
登録したのはFROMですので、memoryはfromです。 segmentとoffsetは少し複雑です。
画像2をFROM0に登録した場合、アドレスは下図のようになります。
FROMのアドレスも表示メモリと同様に、縦8dot単位で上→下、左→右の順です。 そのように計算すると、アドレスは、赤の部分が0、橙が8、緑が16、水色が6120、青が6128、紫が6136になります。 それからsegmentとoffsetを計算すると、それぞれ図に示したような値になります。 18-①の場合、「横:256→511 縦:8→15」の部分を表示させたかったので、segmentは24、offsetは8とします。 width、heightはこれまでと同じく、表示させたいサイズですので、それぞれ256、8とすると、表示画面と同サイズで表示されます。 また、画像2のサイズは縦192dotですから、yは24です。
では、おさらいとして、For...Next文を使ってみましょう。
プログラム19
Sub Start()
Cursor 0 , 0
Cls
SetFont 16X32
KanjiOn
For x = 0 To 2 '・・・①
For y = 0 To 1 '・・・②
CopyBmp from , 24 * y , 8 * x , 256 , 8 , 24 '・・・③
Sleep 1000 / 14
Next '・・・②
Next '・・・①
End Sub
19-①、②の、ループの順序は
・順序① x = 0のとき
y = 0
y = 1
・順序② x = 1のとき
y = 0
y = 1
・順序③ x = 2のとき
y = 0
y = 1
ですので、19-③のsegment、offset部分は、それぞれ、0 , 0 → 24 , 0 → 0 , 8 → 24 , 8 → 0 , 16 → 24 , 16のようにかわります。 つまり、「横:0→255 縦:0→7」 → 「横:256→511 縦:0→7」 → 「横:0→255 縦:8→15」 → 「横:256→511 縦:8→15」 → 「横:0→255 縦:16→23」 → 「横:256→511 縦:16→23」の順で、約1秒おきに表示されます。