Mobile:NEWS 2003年11月28日 10:45 PM 更新

BREW プログラミング入門(6)
ビットマップを描画してみよう(1/2)

前回はイベント処理について解説しました。今回はファイルやリソースに関する事柄とビットマップやイメージの描画について解説します。

 今回は、ファイルやリソースに関する事柄とビットマップやイメージの描画について解説します。なお今回は、いつもの倉谷智尋に代わり堀口淳史が担当します。

ファイルシステム

 BREWにはJAVA(J2ME)とは違いPCのようなファイルシステムが存在します。このファイルシステムはファイル名の最大長が64文字であるという制限を除けば、ディレクトリも作成できるなど便利な構造になっています。ファイルを扱うインタフェースにはIFileMgrやIFileなどがあります。


BREWのファイルシステムの例

 上の図は、エミュレータ上でのファイルの構成を表しています。BREWのファイルシステムでは、アプリごとにフォルダが存在し、アプリは自分のフォルダの中と共有ディレクトリ(shared)のみアクセスすることが可能です。つまり、ほかのアプリのディレクトリを操作することはできません。

 実際には、共有ディレクトリが操作可能かどうかは実装依存の部分があります。エミュレータの場合は、エミュレータの設定のアプレットディレクトリがBrew File Systemフォルダとなります。また、実機上では.dllファイルではなく.modファイルが存在し、.sigファイルという認証ファイルも存在します。

リソースファイル

 リソースファイルとはアプリで使う、文字列や画像やダイアログのデザインなど動的に変更されない、実行コード以外のアプリの部品を一つのファイルにまとめたものです。リソースファイルは一つのアプリに一つである必要はありません。リソースファイルを持たないアプリも作成できますし、一つのアプリで2つ以上のリソースファイルを 使用することもできます。BREWのリソースファイルは拡張子.barを持っており、これはBREW SDKに含まれるBREWリソースエディタで作成することができます。

 今回はビットマップの表示についても学習する予定なので、リソースファイルに関してはビットマップを含んだリソースファイルの作成をメインに解説します。

リソースファイルを作成する

 それでは、ビットマップを含んだリソースファイルを作成してみましょう。ビットマップは画像エディタなどであらかじめ作成しておきます。ここで注意点ですが、BREWで推奨されているビットマップの形式は、圧縮なしの色深度1・2・4・8ビットのビットマップです。


リソースエディタの画面

 BREWリソースエディタを起動して、画像の項目を選択し、[リソース]メニューから[新規画像]を選択します。リソースIDやリソース名などの項目を埋めてからあらかじめ用意しておいたビットマップファイルを選択して[OK]ボタンを押します。

 リソースIDは後でAPIを使用してリソースを取得するときに必要になるIDです。ビットマップを選択した時点で、画像情報の欄に警告表示が出る場合は画像の形式がBREW準拠ではないということです。この場合、実行時に正確に画像が扱われるかどうかは実装依存の部分があるようです。


画像リソースの追加中の画面

 画像の追加が終了したら、[ファイル]メニューから[保存]項目を選択してアプリを開発しているディレクトリに.briファイルとして保存します。.briファイルは編集可能な状態でのリソースの情報をファイルにしたものでBREWリソースエディタしか扱いません。

 次に、[作成]メニューの[QUALCOMM .BAR/.H ファイルを作成]項目を選択して.barファイルとリソースIDなどの情報の入ったヘッダファイルを書き出します。実際に、アプリ側から使用するのは.barファイルと.hファイルです。

リソースファイルからデータを取り出すには

 アプリ側では、ソースコード上で .h ファイルをインクルードして、IShellインタフェースのAPIを使用して.barファイルからリソースを取り出すという処理をします。IShellインタフェースのリソースに関するAPIは以下のようなものがあります。

関数名説明
ISHELL_LoadResBitmapリソースからビットマップを取得します。
ISHELL_LoadResImageリソースからイメージを取得します。
ISHELL_LoadResStringリソースから文字列を取得します。
ISHELL_LoadResSoundリソースからサウンドデータを取得します(現在のバージョンではサポートされていないようです)。

 以下の関数はあまり使うことはないでしょう。

関数名説明
ISHELL_LoadResObjectリソースからデータを取得してデータを操作するインターフェースを返す。
ISHELL_LoadResDataリソースからIDとリソースの種類を元にデータを取得する。
ISHELL_LoadResDataExリソースから ID とリソースの種類を元にデータを取得する。

 ここではそれぞれのAPIについては詳しく解説しませんが、ビットマップを取得するにはISHELL_LoadResBitmap関数もしくはISHELL_LoadResImage関数を使用します。下記のコードはdrawbmp.barリソースファイルからRES_ID_TILE=1000のビットマップリソースを取得して、IBitmap*を返します。

ISHELL_LoadResBitmap(shell,"drawbmp.bar",RES_ID_TILE);

IBitmapとIImage

 ところで、ISHELL_LoadResBitmap関数を使用するとリソースのビットマップをIBitmapとして取得し、ISHELL_LoadResImage関数を使用するとリソースのビットマップをIImageとして取得することができます。IImageはビットマップに加えて、jpegやpngなどのデータも扱うことができるハイレベルなインタフェースです。

 IImageクラスを使用するとデータの変換などを気にすることなく扱えますが、ビットマップに限った場合は、IBitmapを直接扱うほうが、より高速な処理ができます。ただしIBitmapを使用する場合は、以下のような少し込み入った話も存在します。

ビットマップの込み入った話

 BREWにはデバイスデペンデントビットマップ(DDB)とデバイスインディペンデントビットマップ(DIB)というものがあります。デバイスデペンデントビットマップとは携帯電話の内部実装上でのビットマップの形式であり、これは機種依存性があり、一般的なビットマップファイルの構造と比べると、構造自体やデータの扱い方が違う可能性があります。

 それと対照に、デバイスインディペンデントビットマップは機種間の依存性や違いをなくして抽象化したビットマップのことを指します。通常、ビットマップのパレット情報やピクセルデータを直接参照して修正したりする場合は、DIB形式のデータを修正します。描画APIに渡すデータはDDB形式でないといけないため、DIBとDDBを変換するCONVERTBMPというヘルパー関数も存在します。

 逆に、DDBからDIBに変換するにはIBitmapクラスのQueryInterface関数を使用しないといけません。

 また普段はあまり使用しませんが、IBitmapレベルでIBITMAP_BltIn関数などを使用してデータの転送を行う場合、転送元と転送先のビットマップの形式が同じでないと、思うようにデータが転送されないこともありますが、かなり細かい話になってくるので詳細はBREWのリファレンスやより詳しい情報サイトを参照して下さい。

[堀口淳史, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.

前のページ | 1/2 | 次のページ



モバイルショップ

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!