ラスタ/ベクタ、2Dグラフィックスの基礎のキソ:BREWアプリケーション開発入門(4)
BREWの基礎から開発環境の構築・アプリケーション開発までを順を追って紹介。環境構築の確認とプログラムの実行方法を解説した前回に続き、今回からは“グラフィックス”をテーマにした内容をお届けする。
前回までは、「HelloWorld」プログラムを題材にした「BREW(Binary Runtime Environment for Wireless)」アプリケーション開発の基礎について解説してきましたが、今回からは“グラフィックス”をテーマにした内容をお届けします。
単純な「HelloWorld」プログラムでは少し退屈だったかもしれませんが、グラフィックスであれば、見た目にも分かりやすく、BREWアプリケーションの楽しさをより実感していただけると思います。
というわけで、今回は比較的扱いやすく、利用範囲の広い「2Dグラフィックス」を題材に解説を進めていきたいと思います。
ラスタデータとベクタデータ
2Dグラフィックスのデータは大きく「ラスタ」と「ベクタ」の2つに分類できます。
ラスタは単純なドットの集合体としてグラフィックスを表現するデータです。一方、ベクタは点で結ばれたさまざまな線を演算するなどして絵を表現するデータです。
それぞれ用途が異なり、どちらが優れているというわけではありません。しかし、一般的に絵を高精細なまま回転・拡大・縮小するような“スケーラブルな表現”に対してはベクタが向いており、単純に高精細な絵を“軽量に表現”する場合にはラスタが向いているといえます。もちろん、ベクタでも高精細な絵を表現することはできますが、複雑な形状ですと計算量が大きくなってしまいますので、計算能力の低い機器では実現が困難といえるでしょう。
BREWの標準API(Application Programming Interface)は、ラスタ/ベクタのどちらの2Dグラフィックス描画もサポートしています。
ラスタデータの場合、何らかの画像フォーマットのデータを読むことになりますが、BREWでは「BMP」「PNG」「JPEG」「BCI(BREWオリジナルフォーマット)」がサポートされており、用途に応じて使い分けるようになっています。
また、BMPデータは大きく環境依存の「DDB(Device Dependent Bitmap)」と環境非依存の「DIB(Device Independent Bitmap)」に分かれますが、最終的に携帯電話の画面に対して出力するためにはDDBである必要があります。逆に、内部形式を変更するデータ操作を行う場合は、DIBである必要があります。このため色情報などの変更を行う場合は、DIBで変更を行い、それからDDBに変換するという手順になります。
2Dベクタグラフィックの描画
2Dベクタグラフィックスを描画するためには「IDisplayインタフェース」と「IGraphicsインタフェース」を利用します。それぞれ描画できる形状が異なり、用途で使い分けたり、組み合わせて利用したりすることになります。
IDisplayインタフェースを利用する
まずは、IDisplayインタフェースによる描画について見ていきましょう。IDisplayインタフェースでは、以下の関数で形状を描画できます(表1)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
IDisplayインタフェースは、文字描画の「IDISPLAY_DrawText()」で利用しました(注1)が、基本的に使い方は一緒です。スクリーン座標を指定して、グラフィックスを描画するだけです。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
以下は直線を描画するサンプルです(ソース1)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実行する際には、「HelloWorld」プログラムと同様に関数宣言と適当なイベントハンドラ(例えば、EVT_APP_START)から関数を呼ぶコードも加えます。画像1は「BREW Simulator」(注2)上での実行結果となります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ソース1の中で、まず「ISHELL_GetDeviceInfo()」でデバイス情報を取得しています。この関数は「BREW AEE(Application Execution Environment)」に対して、さまざまな操作を行う「IShellインタフェース」が提供する関数です。文字通り、BREW AEEのシェルの役割を果たします。
線描画を行う部分が「IDISPLAY_DrawHLine()」と「IDISPLAY_DrawVLine()」になりますが、2つの関数はそれぞれ以下のような定義になっています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
第1引数にIDisplayのインスタンスを、第2、3引数で描画開始位置のX・Y座標を指定します。そして、線の長さを指定することによって水平・垂直の線が描画されます。最後に、文字描画と同様に画面更新をするために「IDISPLAY_Update()」を実行します。
IDisplayインタフェースを利用する場合には、最初から「AEEApplet」構造体にIDisplayのインスタンスが入っているので、それをそのまま利用すれば問題ありません。しかし、次に紹介するIGraphicsインタフェースを利用する場合には、インスタンスを別途生成する必要があります。以降で詳しく見ていきましょう。
>>「IGraphicsインタフェース」による描画については次ページ(MONOistサイトに移ります)で解説します
関連記事
- BREWアプリケーション開発入門(1):ケータイアプリ開発の第一歩を踏み出そう!!
携帯電話用アプリケーション・プラットフォーム「BREW」をご存じだろうか。本稿では、BREWの基礎から開発環境の構築・アプリケーション開発までを順を追って詳しく解説し、開発の流れと基礎知識を伝授する。 - BREWアプリケーション開発入門(2):BREWアプリケーション開発の流れを押さえよう
BREWの基礎から開発環境の構築・アプリケーション開発までを順を追って紹介。今回は「Hello World」を題材に、プロジェクトの作成からエミュレータ環境での実行まで、BREWアプリケーション開発の流れを解説する。 - BREWアプリケーション開発入門(3):BREWアプリケーションの構成を理解しよう!
BREWの基礎から開発環境の構築・アプリケーション開発までを順を追って紹介。環境構築の確認とプログラムの実行方法を解説した前回に続き、今回は“プログラムの詳細部分”について詳しく見ていきたい。 - BREWアプリケーション開発入門(1)ケータイアプリ開発の第一歩を踏み出そう!!
- BREWアプリケーション開発入門(2)BREWアプリケーション開発の流れを押さえよう
- BREWアプリケーション開発入門(3)BREWアプリケーションの構成を理解しよう!
- BREWアプリケーション開発入門(4)ラスタ/ベクタ、2Dグラフィックスの基礎のキソ
- 連載:BREWアプリケーション開発入門(@IT MONOist)
- 連載:Symbian OS開発の勘所(@IT MONOist)
- 連載:Symbian OSアプリ開発の手引き(@IT MONOist)
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.