読者です 読者をやめる 読者になる 読者になる

ひっきぃのメモ帳

趣味で作るプラモデル製作の過程と作品、日々の資格取得へ向けての活動、Apple中心のIT関連ネタを書いています。

[]第14回 画像を表示する

作品紹介シリーズで少し間が開いてしまいましたが、第14回では画像の表示をしてみます。

iアプリで使える画像ファイルは gif が基本です。jpeg も使え機種は多いので、gif でも jpeg でもどちらでもよいでしょうけどね。最近だと BMP も扱える機種があるみたいです。

準備
 最も簡単な方法は、プロジェクトの res フォルダに入れること。ひとつ気をつけることはサイズです。機種により動作可能な iアプリ のサイズが違っていて、このフォルダに画像を入れるとアプリのサイズに含まれます。ただし、最近の機種では扱えるサイズがずいぶん大きくなったので、古い機種を考えないなら問題ないです。

画像の読み込み
 今回は、以前に作ったタイトル画面のカーソルに画像を使ってみましょう。
まずは、カーソル画像を保持するための変数宣言
 

 Image cur;

これは、Canvas全体で使いますので、Canvas直下に宣言。

読み込みは try … catch 句で括ります。

  try {
MediaImage curImg = MediaManager.getImage("resource:///cur.gif");
curImg.use();
cur = curImg.getImage();
}catch(Exception e) { }

失敗しても、スルーするというやる気の無い例外処理でも、無いといけません。
これは、最初に1回だけの準備でよいので、Canvasコンストラクタ内に書きます。

 cur.gif は res に入れたファイル名、さらにサブフォルダに入れた場合はフォルダ名から指定します。
 curImg は読み込み直後のメディアイメージ保持用。まだ、内部では画像としては使えません。
  curImg.use(); で使用可能であることを宣言します。この段階でメモリが必要になります。あんまり沢山の画像は一度には使用可能にできません。使用不可に戻す場合は、unuse() を使います。
 curImg.getImage(); で利用可能なメディアイメージから、表示できるイメージを取り出します。

画像の描画
準備ができたたら、描画しましょう。
paint(Graphics g) の中であれば、

  g.drawImage(cur, 100,100);

とすれば、100,100の位置に画像を表示します。
ただし、文字の場合と画像の場合では表示位置が違います。

     文字の場合は、文字の下のベースライン。
     画像の場合は、左上の角。

になります。タイトル2

この違いを反映させておきましょう。


 

コンストラクタのコード

   MainCanvas() {
setSoftLabel(SOFT_KEY_1, "END");
setBackground(Graphics.getColorOfName(Graphics.BLUE));

try {
     MediaImage curImg = MediaManager.getImage("resource:///cur.gif");
     curImg.use();
cur = curImg.getImage();
}catch(Exception e) {}
}

paintのコード

    public void paint(Graphics g) {

int y=0;

g.lock();
g.clearRect(0, 0, Display.getWidth(), Display.getHeight());
g.setColor(Graphics.getColorOfName(Graphics.WHITE));
g.drawString("タイトル画面", 80, 50);
g.drawString("メニュー1", 100, 130);
g.drawString("メニュー2", 100, 150);
g.drawString("メニュー3", 100, 170);

if( sel==0 )
y = 120;
if( sel==1 )
y = 140;
if( sel==2 )
y = 160;

g.drawImage(cur,85,y);
g.unlock(true);
}