第4回 カメラ機能を使ってカードを作ろう90Xi専用ゲームiアプリ開発講座(2/2 ページ)

» 2004年11月09日 13時15分 公開
[澤橋辰典・武上将樹,ITmedia]
前のページへ 1|2       

画像を解析をしてカードにパラメーターを付加する

 画像の解析といっても、撮影した画像をすべて処理していたのでは時間がかかる。そこで、写真の中の1ピクセルを取得して、カードに個別の情報を持たせるためのパラメータを決定する。

 まずはrepaintで描画を行い、Graphics.getRGBPixel(int x, int y)で現在描画されている画面の任意の点のピクセルのRGB値を取得する。

int rgb = _canvas.getGraphics().getRGBPixel(120, 120);

 取得したRGB値は、0xRRGGBBの形式の整数値である。以下は、RとGとBを乗算して、その値から1〜9の値を導いている例である。

int r = (rgb >> 4) & 0xFF;
int g = (rgb >> 2) & 0xFF;
int b =  rgb    & 0xFF;
new_cp = r*g*b % 9 + 1;

 ほかにも、特定の色に反応する処理をしたい場合は、RGBのそれぞれの比を算出し、Bが強ければ青、RとGが強いが、Bが弱ければ黄色のように判定する方法が考えられる。

 解析が済んでパラメータが決定したら、カメラで撮影した画像をゲームで使用するカードの大きさに切り抜いて保存する。以下は、Graphics.getPixelsで画面中央から50×30のピクセルを取得し、そのピクセル配列を元に、カード用の画像を作成する方法である。

int[] pixs = _canvas.getGraphics().getPixels(
(Display.getWidth()-50)/2,
(Display.getHeight()-30)/2,
50, 30, null, 0); 
img[picture_count+9] = Image.createImage(50, 30, pixs, 0);
card_pow[picture_count] = new_cp;
picture_count++;

エミュレータや実機での動作確認をしよう

 今回のソースはここからダウンロードできる。実際にコンパイルして実行し、カード生成モードへ遷移してみる。

  • タイトルからソフトキー2(右)→デッキメニューから遷移

 エミュレータで写真撮影(Camera.takePicture())を行うと、ファイル参照のウィンドウが表示されるので、176×144の画像を選択する。この画像を撮影された画像として動作確認を行える。

 今回のプロジェクトフォルダにcamフォルダを追加した。中には、green.jpgとpink.jpgが入っている。エミュレータでそれぞれの画像を選択すると、カードのパラメータは6と2になる。ソースを実際の端末にダウンロードして動作させると、写真撮影時にカメラが起動され、撮影した画像によりパラメータが変化する。

次回はスクラッチパッドを使って記憶領域にデータを保管する

 次回は、スクラッチパッド(ローカルの保存領域)を利用して、撮影データを保存、読込する処理と、画像をネットワークからダウンロードして保存、読込する処理を解説する。

筆者紹介──澤橋辰典・武上将樹

 ケータイアプリ(iアプリ/EZアプリ/Vアプリ)のNo1ポータルサイト「アプリ★ゲット」を運営するスパイシーソフトに勤務。

 澤橋は学生時代、iアプリのコンテストでゲームアプリやツールアプリを制作し、入賞経験がある。また、所属していたサークルの後輩に、ものづくりの楽しさやアプリの奥義を授け、その後輩も入賞していることから、自らをiアプリエヴァンジェリスト(伝道者)と呼んでいる。現在も大手企業にOEM提供しているアプリの開発を行っている。

 武上は、イーアクセスとの共同事業「どこでも読メール」や、各社にOEM提供しているアプリメールサービスなどで、主にサーバサイドやデータベースまわりの開発を担当している。ゲームアプリは、もっぱらプレイ専門。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

最新トピックスPR

過去記事カレンダー

2024年