---
parent: Canvas
title: キャンバスの特徴
date: 2017-3-29
---

このキャンバスの特徴は大きく分けて4つあります.

* 応用しやすい関数セット
* 白紙のキャンバスに文字、画像、直線などを描くような操作
* 高い移植性
* 高い描画効率

===

# 応用しやすい関数セット
    各関数と変数の関係は次のようになっています.

    オレンジ:変数<br/>
    青: 関数<br/>

    ![関数の関係](CURRENT_DIR/Images/Canvas/Img1.png)

    上図からわかるように, 基本関数から発展していき高度な関数が完成していきます.
    Canvasで用意されている関数は基本的なものばかりです. 
    これらを組み合わせてキャンバスを強化することも可能です.
    例えば, 格子模様を描画する関数を作成したい場合―そのような関数が役立つかは別として―, Line関数を使うことで実現できるでしょう.

# 白紙のキャンバスに文字、画像、直線などを描くような操作
    ![操作性概念図](CURRENT_DIR/Images/Canvas/Img2.png)

    実際にプログラムを書く際, 描きたいものを描きたいところに指定する感覚でプログラムを書いていくことになります.
    これは, グラフィック液晶の操作方法によく用いられているアドレスの指定と書き込みと比べ簡単です.
    例えばあるところに点を打つとして, 後者の方法だと点の位置をアドレスに変換しそのアドレスの何ビット目が打ちたい点にあたるかを計算する必要がありますが,
    このライブラリでは, 文字通り打ちたいところに点を打つことになります.

    このような設計思想は[HSP言語](http://hsp.tv/)をもとにしています.

# 高い移植性
    ![移植性](CURRENT_DIR/Images/Canvas/Img0.png)

    2Dグラフィックの操作を分けることで, ほかの表示機に移植しやすくなります.
    例えば, グラフィック液晶で表示していたものをドットマトリックスで表示したい場合を考えましょう.
    もし, 2Dグラフィックの操作とグラフィック液晶への描画を一つにしてプログラムを組んでいたとすると,
    ドットマトリックス用に2Dグラフィックの操作と描画を別に作る必要があります.
    ですが, 2Dグラフィックの操作を別にしていると, 作るのはドットマトリックスにキャンバスの内容を反映するところのみで済みます.

# 高い描画効率
    このキャンバスを用いることで高い描画効率が望めます.
    このキャンバスは描画内容に変更があったかを示す情報を持ちます.
    この情報を用いることで, キャンバスの内容を表示機に描画する際, 
    変更があったところのみ描画することができ全画面描画と比べ描画速度が速くなります.
    この機能は, 汎用性の観点からBaseクラスから分離されました. 
    派生クラスでの実装になります.
    詳しくは, コード内をご覧ください.