CodeWarrior講座


●ビットマップファミリーについて

 Code Warrior講座の第二回に関して3つの質問をいただきましたが、理解するにはビットマップファミリーについての知識が必要です。以下の解説を参考にしてください。

・ビットマップファミリーとは?
 ビットマップファミリーとは色数、解像度などが異なる複数の画像を集めて、ひとつのリソースとしたものです。ビットマップファミリーは、アプリケーションからは一つのビットマップリソースとして認識されます。
 アプリケーションがビットマップリソースの描画をOSに指示すると、OSは画面の色数、解像度などから最適な画像をビットマップファミリーの中から探し出して描画を行います。これによってアプリケーションが画面の色数等を意識しなくても常に最適な画像表示ができることになります。
 Palm OS 4.0 SDKに付属のExampleの中では、HardBallがBitmap Familiyに対応しています。これを実行してみるとカラーのマシンでは画面がカラーで表示され、モノクロマシンではモノクロで表示されます。これはビットマップファミリーとしてモノクロの画像とカラーの画像が含まれているからです。

・ビットマップファミリーを作るには?
 Constructorでビットマップファミリーを作る方法は、次のようになります。
 まず、サンプルの中のHardBallを開き、HardBallMisc.rsrcをConstructorで開いてください。

図1のようにBitmap FamiliesとBitmapsの中にリソースが入っていることがわかります。

図 1

 Bitmap Familiesの中からBoardというリソースを開くと図2のようになります。これを見ると、Boardというビットマップファミリーのサイズは160x140であることがわかります。また、その中にはDepth(色数)が1bit、つまりモノクロの画像と、Depthが8bit、つまり256色の画像が含まれていることがわかります。そしてモノクロの画像はID=1010のビットマップであり、カラーの画像はID=1080のビットマップであることもわかります。ここでBitmapID 1080に右にあるEditボタンを押すと図3の画像が表示されます。

図 2

図 3

 注意が必要なのはConstructor上におけるID=1000のビットマップファミリー、ID=1010のビットマップ、ID=1080のビットマップは最終的にはID=1000のビットマップリソースになるということです。ビットマップについているID(1010,1080)はビットマップリソースを作るときだけに使われ、最終的なリソースには含まれないことに注意してください。

   Constructor                  Application

   Bitmap Family/ID = 1000
   Bitmap /ID = 1010    -----> ビットマップリソース/ ID = 1000
   Bitmap /ID = 1080

 ところで、前回説明したReptoidではビットマップファミリーは出てきませんでした。これは「Bitmap Familyに含まれないBitmapはそれ1つだけを含むビットマップリソースになる」という過去との互換性を取るためのルールによるものです。この場合、

   Bitmap /ID = 1010    -----> ビットマップリソース / ID = 1010

となります。
 アプリケーションをカラー化することを容易にするためにも、今後ビットマップリソースを作られる場合は必ずビットマップファミリーとして作るとよいでしょう。



●質問1
ビットマップのサイズを変えるにはどうしたらよいでしょうか? 小さくするのは簡単そうですが、大きくする方法は?


 「ビットマップファミリーとビットマップはすべて同じ大きさでなくてはならない」という原則があります。そこで、ビットマップのサイズを変える場合、ビットマップファミリーの大きさを変え、それに含まれるビットマップのサイズをすべて同じにしなくてはなりません。
 ビットマップファミリーの大きさを変えるには図2においてWidthとHeightを変えます。ビットマップの大きさを変えるには図3のウィンドウがアクティブになっている状態でメニューのOptions/Set Image Sizeを変更します。
 どれかひとつでもサイズが違っているとCodeWarriorのBuild時にエラーが出ますので、注意してください。

●質問2
カラーのデバイスを使っています。色のついたビットマップを 扱いたいのですが、色を付けるだけでいいのでしょうか


 すでにビットマップファミリーができていれば、ビットマップファミリーの中にカラーのビットマップを追加するだけで可能です。
 ただし、前回説明したReptoidはビットマップファミリーが作られていませんので、まずビットマップをビットマップファミリーにするところからはじめる必要があります。
 例えば前回変更したID=1025のビットマップをカラー化することを考えてみましょう。該当するビットマップを開いて、メニューからOptions/Set Image Sizeを実行すると、このビットマップの大きさが16x16であることがわかります。
 ID=1025のビットマップということはID=1025のビットマップリソースが作られていたことになりますので、ID=1025のビットマップファミリーを新規に作成します(図4)。

図 4

 そして、その大きさは16x16とします。このビットマップファミリーの中にすでに用意されているID=1025のモノクロビットマップを追加します。そして、さらに新しく作るカラーのビットマップを追加します。カラービットマップのIDは既存のものと重複しないように1125としました。カラーのビットマップですから、Depthを8とします(図5)。そしてID=1125の右にあるCreateボタンを押すとビットマップの編集画面になります。ここでカラーの画像を作成してください(図6)。
 そしてBuildしたReptoidを実行すると、図7のようにカラーになっていることがわかります。
 なお、ビットマップファミリーの中ではDepthが小さい順に並んでいなくてはならないというルールがあります、Depth=1と8のビットマップを含める場合、Depth=1の方を上におかなくてはならないことに注意してください。

図 5

図 6

図 7

●質問3
アイコンもリソースでできているようですが、同じように書き換える ことができるのでしょうか?

 カラーのアイコンを作る場合、App Icon Familiesの中にリソースを作ります。これらのリソースはビットマップファミリーと同じように編集することができます。ID=1000に大きなサイズ(22x22)のアイコンを、ID=1001として小さなサイズ(15x9)のアイコンを作ります。新しいConstructorではサイズは自動的に設定されます。
 なお、Constructorのリソース一覧の中にはIconsというリソースもありますが、このリソースは過去との互換性のために用意されているもので、モノクロのアイコンしか作れません。これは使わないようにしてください。



copyright(C)2002 Hacker Dude-san all rights reserved.