Mobile:NEWS 2003年9月12日 06:02 PM 更新

エンタメiアプリを作ろう
第5回 505i用にパワーアップ(1)

待ち受けiアプリ版カメラを、505iシリーズで動作するアプリにする。

 前回まで504iSシリーズで動作する待ち受けiアプリ版カメラを作成していきましたが、今回は全機種出そろった505iシリーズ用に改良してみようと思います。

 単に505iシリーズ用に移植するだけでは物足りないので、新しい機能も盛り込んでいきましょう。

505iではカメラクラスが変更に

 カメラの部分ですが、前回までに作成した待ち受けiアプリ版カメラは、505iでは動作しません。その理由はカメラクラスが標準化したためです。第1回で使用した「com.nttdocomo.opt.ui.Camera」は504iSのオプションAPIで、505iからカメラデバイスのAPIが「com.nttdocomo.device.Camera」に標準化されました。

 504iSから機能が追加されています。カメラアプリとして考えると、撮影可能な画像サイズを取得できることと、撮影時にフレーム画像を合成して撮影できるのが便利な機能です。

撮影可能サイズを取得する

 505iでは撮影可能なサイズをgetAvailablePictureSizes()メソッドを使うことで取得できます。これによって機種によっての撮影サイズを調べられます。

 //撮影可能サイズの取得
 int[][] nPictureSize = camCamera. getAvailablePictureSizes();

 nPictureSizeにはニ次元配列で撮影可能なサイズ{{横サイズ1,縦サイズ1},{横サイズ2,縦サイズ2},{横サイズ3,縦サイズ3}}のようにデータを取得できます。

フレーム合成撮影を可能にする

 通常にカメラでフレーム合成をするように、アプリでもフレーム合成した状態の撮影ができるようになりました。実際に実装してみましょう。

 フレームは撮影サイズと同一のサイズである必要があり、フレーム撮影できることや、撮影できるサイズは機種ごとに異なります。機種ごとにフレーム撮影可能かどうかをアプリ側で判断する必要があります。

(1)フレーム撮影が可能な機種かの判別

 フレーム撮影が可能な機種かの判別はgetAttribute()メソッドで調べることができます。

 //フレーム撮影可能な機種判別
 if (camCamera.getAttribute(Camera.DEV_FRAME_SHOT)==Camera.ATTR_FRAME_ON) {
  ※フレーム撮影可能
 }

※nResultにはATTR_FRAME_ON(=1)・ATTR_FRAME_OFF(=0)の数値が取得でき、フレーム撮影可能かどうかを判別できます。

(2)フレーム撮影可能なサイズの取得

 フレーム撮影可能サイズはgetAvailableFrameSizes()メソッドを使うことで取得できます。

 //撮影可能なフレームサイズの取得
 int[][] nFrameSize = camCamera.getAvailableFrameSizes();

 nFrameSizeには、撮影可能サイズを取得した時と同様に、二次元配列でフレーム撮影可能なサイズが取得できます。

(3)フレームの指定

 フレーム撮影が可能な場合、実際にフレームをつけて撮影してみましょう。撮影処理時にフレーム画像をMediaImageで指定することでフレーム撮影ができるようになります。フレームの指定はsetFrameImage()メソッドを使います。

 //撮影フレームの設定
MediaImage mediaFrame=
MediaManager.getImage("resource:///frame"+(nFrameNo-1)+".gif");
mediaFrame.use();
camCamera.setFrameImage(mediaFrame);

※MediaImageはuse状態である必要があります。

QVGAに対応する

 505iシリーズで大きな変更点は、液晶がQVGA対応になったことでしょうか。QVGAになったことで今までの表示サイズがおよそ2倍くらいになり、1画面で表示できる情報量も増えて表現力豊かになりました。

 しかし、503iや504iで動いていたアプリを505iで実行すると小さく見づらい画面になってしまいます。今まで作成したアプリをQVGAに対応してみましょう。505iシリーズから標準APIになった拡大縮小機能、drawScaledImage()メソッドがあります。これを利用してみましょう。

//リソースの背景画像を画面サイズに拡大する。
g.drawScaledImage(imgTex,0,0,getWidth(),getHeight(),
0,0,imgTex.getWidth(),imgTex.getHeight());


拡大後イメージ

 粗い感じになってしまいますが、どの機種のサイズにも対応できます。

 拡大処理は便利な機能ですが、機種によっては重い処理です。毎回描画のたびに拡大処理を入れるとなるとアプリ自体の動作が遅くなって操作性が悪くなってしまいます。こういった状態を避けるためにあらかじめ拡大した画像を準備しておいたほうが効率的です。

//あらかじめ拡大した画像を準備する。
Image imgScaledTex = Image.createImage(getWidth(),getHeight());
Graphics graTex = imgScaledTex.getGraphics();
graTex.drawScaledImage(imgTex,0,0,getWidth(),getHeight(),
0,0,imgTex.getWidth(),imgTex.getHeight());

 次回はさらに機能を盛り込んでみましょう。今回の505iシリーズ版待ち受けiアプリ版カメラのソースはこちらです。

 
著者紹介
寺田雄一:携帯電話向けアプリの開発を行うRapl(らっぷる)の代表。ゲームなどエンタメ系アプリが主体だがビジネス系アプリの開発も行っており、現在は公式サイトのアプリ開発に携わっている。



関連記事
▼ 第1回 カメラを使ってみよう!
504iSから505iまで、ドコモの携帯電話で動作するiアプリの開発方法を全6回の連載でお届けする。第1回は、iアプリからカメラを操作する方法を学ぶ。

▼ 第2回 写真を保存してみよう
前回作成したiアプリ版カメラソフトに保存機能を実装する方法を説明する。

▼ 第3回 飾りをつけてみよう
iアプリ版カメラにエンタメらしい機能を考え実装してみる。

▼ 第4回 待ち受けiアプリにしてみよう
iアプリ版カメラを待受けアプリにしてみる。

▼ ドコモ四国、第2回iアプリコンテスト
ドコモ四国はiアプリおよび、505iで動作するFlashコンテンツのコンテストを開催する。


関連リンク
▼ 第2回ドコモ四国iアプリコンテスト
▼ NTTドコモ四国
▼ アプリ★ゲット

[Rapl 寺田雄一, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.



モバイルショップ

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

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