SUPPORT
h_top333.jpg

絵を表示させてみよう -その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秒おきに表示されます。

 


当ウェブサイトでは、お客さまによりよいサービスをご提供するため、Cookieを使用しています。
Cookieを無効にする方法を含め、当社のCookieの使用については「個人情報保護方針」をお読みください。

OK