2006年02月20日

グラフィックス描画

アミューズメント系アプリケーションや、通常のコントロールでは表示できないような描画を行う場合、グラフィックスの処理がどうしても必要になります。今回はこのグラフィックスの処理を見ていきましょう。
グラフィックスディバイスとグラフィックスコンテキスト

 Series60では、Win32 APIなどのようにグラフィックス関連の操作は抽象化が行われてます。この抽象化により、単に「画面上ある点から他の点に線を引く」「矩形に塗りつぶす」といった処理を行うことができます。この抽象化を担うのが「グラフィックスディバイス」と「グラフィックスコンテキスト」です。

 グラフィックスディバイスは、描画対象を表すクラスになります。通常、描画の対象となるものは(携帯でしたら)液晶画面と考えるのが一番自然でしょう。しかし、画面のチラツキを抑えるためにダブルバッファリングを行うと、どうしてもビットマップを別途用意する必要があります。このようなビットマップへの書き込みも、ビットマップを表すグラフィックスディバイスを用います。

 これに対して、グラフィックスコンテキストは描画のための関数や制御を提供するクラスになります。よくある説明としては、

* グラフィックスディバイスは描画される紙やキャンパスにあたる
* グラフィックスコンテキストは描画する際に用いるペンや筆である

といわれることが多々ありますが、今回もこのように考えれば大丈夫です。

グラフィックスディバイス

 先に述べたとおり、グラフィックスディバイスは「描画の対象を抽象化する」ためのクラスです。しかし、液晶画面に描画するのか、ビットマップ領域に描画するのかで使用するクラスが異なってきます。

 Series60では、APIとしてC++のライブラリを利用していますので、複数クラスがある場合は当然、クラスの階層関係が考えられます。グラフィックスディバイス関連のクラス階層の頂点(つまりもっとも抽象的なクラス)がCGraphicsDeviceクラスになります。そして、各々の描画対象を表すクラスは、このCGraphicsDeviceクラスを継承する形で定義されています(図1)。

■ 図1 グラフィックスディバイスのクラス構成 (出典:NRIラーニングネットワーク 「ノキア Series 60 C++開発入門コース」より)

 CGraphicsDeviceクラスが持つメンバ関数としては以下のものがあります。つまり直感的には、描画を行う際に必要な情報を管理していると見ていただいても構わないと思います。

* ディスプレイ領域の管理
SizeInPixelsやSizeInTwipsなどの関数
* フォントの管理と取得
GetNearestFontInTwipsなどの関数
* カラーフォーマットの管理
DisplayMode関数

グラフィックスコンテキスト

 一方、グラフィックコンテキストは描画を行う際に利用するペンやブラシのようなものです。ですので、具体的な描画用関数はこのグラフィックスコンテキストクラスが持っています(図2)。

■ 図2 グラフィックスコンテキストのクラス構成 (出典:NRIラーニングネットワーク 「ノキア Series 60 C++開発入門コース」より)

 CgraphicsContext クラスが持つメンバとしては以下のものがあげられます。

* 自身が描画を行う対象であるグラフィックスディバイス
Device関数
* 文字描画に使用するフォントの選択
UseFontやDiscardFont関数
* 図形描画に使用する各種設定を行う関数
SetPenSize、SetBrushColorなどの関数
* 実際に図形/文字の描画を行う関数
DrawEllipse, DrawLine, DrawText, DrawBitmapなどの関数群

posted by シンビアン at 10:08| Comment(0) | TrackBack(0) | Series60プログラミングテクニック | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。