
「 iアプリ プログラミング 」(その11) 2004年07月02日更新
目次 |
前頁 |
16.カメラ制御
|
注意点: 下記のサンプルは、DoJa2.xプロファイルのサンプルです。 |
<DoJa 2.x プロファイルの場合>
カメラ制御の概要は、NTTドコモ「iアプリコンテンツ開発ガイドfor504i(iアプリオプション・拡張編)」に記載されています。
詳細は、NTTドコモ「APIリファレンス(iアプリオプション・拡張API編)」に記載されています。
iアプリからカメラ制御(DoJa2.x)を利用できる機種は、504iS、及び、FOMA 2051です。
<DoJa 3.x プロファイルの場合>
カメラ制御の概要は、NTTドコモ「iアプリコンテンツ開発ガイド for DoJa-3.0 詳細編」に記載されています。
詳細は、NTTドコモ「iアプリコンテンツ開発ガイド for DoJa-3.0 APIリファレンス編」に記載されています。
iアプリからカメラ制御(DoJa3.x)を利用できる機種は、505i以降、及び、FOMA
900i以降です。
| メソッド名 | メソッドの機能 | |
| getCamera() | カメラオブジェクトの取得 | |
| カメラデバイスの設定 | ||
| setAttribute() | デバイス属性の設定 | |
| isAvailable() | その携帯電話で対応している属性を判定 | |
| getAttribute() | 各属性の現在の属性値の取得 | |
| setImageSize() | 撮影画像サイズの設定 | |
| カメラ機能の起動 | ||
| takePicture() | 静止画撮影モードでカメラ機能を起動 | |
| takeMovie() | 動画撮影モードでカメラ機能を起動 | |
| 撮影画像の取得 | ||
| getImage() | カメラオブジェクトに保持されている画像を、メディアイメージの形式で取得 | |
| getInputStream() | 画像をバイトストリームの形式で取得 | |
| disposeImages() | 撮影画像の破棄 | |
<サンプル 41>
カメラ起動
※カメラ機能の起動→撮影画像を取得→表示を行います。
| 実行結果 ※FOMA N2051で確認 |
![]() |
1.iアプリ起動時は、空白画面です。 2.「撮影」ボタンを押すと、 カメラ機能の起動が行われ、 カメラ操作画面に切り替わります。 3.撮影が終了すると、 再び、iアプリに切り替わり、 撮影画像が表示されます。 |
| プロブラムソース "test41.java" | ★ソースダウンロードサイトへ★ | |
| // パッケージのインポート import java.io.*; import com.nttdocomo.io.*; import com.nttdocomo.ui.*; import com.nttdocomo.opt.ui.*; // IApplicationのサブクラスとして"test41"を宣言 // ※IApplicationは、iアプリ作成時、必須クラスです。 public class test41 extends IApplication { // 初期化処理 // ※iアプリ起動時に、この"start"メソッドが呼ばれる public void start() { // "mypanel"オブジェクトを生成 mypanel w_panel = new mypanel(); // ソフトキー1のラベルに"終了"を設定 w_panel.setSoftLabel(w_panel.SOFT_KEY_1,"終了"); // ソフトキー2のラベルに"撮影"を設定 w_panel.setSoftLabel(w_panel.SOFT_KEY_2,"撮影"); // 現在の画面に設定 Display.setCurrent(w_panel); } // Panelのサブクラスとして"mypanel"を宣言 class mypanel extends Panel implements SoftKeyListener { // 変数の宣言 private Camera w_camera; private ImageLabel w_imagelabel; public mypanel(){ // カメラオブジェクトの取得 w_camera = Camera.getCamera(0); // イメージオブジェクトをもつイメージラベルを作成 w_imagelabel = new ImageLabel(); // パネルに追加 add(w_imagelabel); // イベントリスナーのインスタンス登録 // ソフトキーリスナー setSoftKeyListener(this); } // ソフトキーが離されたときに実行 public void softKeyReleased(int param){ // ソフトキー1が離された時に実行 if(param == this.SOFT_KEY_1){ // iアプリ終了 terminate(); } // ソフトキー2が離された時に実行 if(param == this.SOFT_KEY_2){ try { // カメラ機能の起動 w_camera.takePicture(); } catch (Exception ce) {} // カメラオブジェクトに保持されている画像を、メディアイメージの形式で取得 MediaImage w_media = w_camera.getImage(0); try { w_media.use(); } catch (Exception ce) {} // メディアイメージからイメージオブジェクトを取得 Image w_image = w_media.getImage(); // ラベル画像を設定・変更 w_imagelabel.setImage(w_image); } } // ソフトキーが押されたときに実行 // ※今回は使用しないが、記述しておかないとコンパイルエラーになる public void softKeyPressed(int param){ } } } |
||
<サンプル 42>
カメラ撮影・保存
※カメラ機能の起動→撮影画像を取得→表示
→画像をScratchPadに保存→ScratchPadから表示を行います。(画像3個まで保存可能)
| 実行結果 ※FOMA N2051で確認 |
![]() |
1.iアプリ起動時は、空白画面です。 2.「撮影」ボタンを押すと、 カメラ機能の起動が行われ、 カメラ操作画面に切り替わります。 3.撮影が終了すると、 再び、iアプリに切り替わり、 撮影画像が表示されます。 4.撮影画像の保存 "1","2","3"の何れかの数字キーを押すと、各キー に対応したScratchPadエリアに保存されます。 5.保存画像の表示 "4","5","6"の何れかの数字キーを押すと、各キー に対応したScratchPadの画像が表示されます。 |
| プロブラムソース "test42.java" | ★ソースダウンロードサイトへ★ | |
| // パッケージのインポート import java.io.*; import javax.microedition.io.*; import com.nttdocomo.io.*; import com.nttdocomo.ui.*; import com.nttdocomo.opt.ui.*; // IApplicationのサブクラスとして"test42"を宣言 // ※IApplicationは、iアプリ作成時、必須クラスです。 public class test42 extends IApplication { // 初期化処理 // ※iアプリ起動時に、この"start"メソッドが呼ばれる public void start() { // "mypanel"オブジェクトを生成 mypanel w_panel = new mypanel(); // ソフトキー1のラベルに"終了"を設定 w_panel.setSoftLabel(w_panel.SOFT_KEY_1,"終了"); // ソフトキー2のラベルに"撮影"を設定 w_panel.setSoftLabel(w_panel.SOFT_KEY_2,"撮影"); // 現在の画面に設定 Display.setCurrent(w_panel); } // Panelのサブクラスとして"mypanel"を宣言 class mypanel extends Panel implements SoftKeyListener,KeyListener { // 変数の宣言 private Camera w_camera; private ImageLabel w_imagelabel; private TextBox w_textbox; public mypanel(){ // カメラオブジェクトの取得 w_camera = Camera.getCamera(0); // イメージオブジェクトをもつイメージラベルを作成 w_imagelabel = new ImageLabel(); // パネルに追加 add(w_imagelabel); // テキストボックス(処理結果表示用) w_textbox = new TextBox("テキストボックス", 16, 1, TextBox.DISPLAY_ANY); // パネルに追加 add(w_textbox); // イベントリスナーのインスタンス登録 // ソフトキーリスナー setSoftKeyListener(this); // キーリスナー setKeyListener(this); } // ソフトキーが離されたときに実行 public void softKeyReleased(int param){ // ソフトキー1が離された時に実行 if(param == this.SOFT_KEY_1){ // iアプリ終了 terminate(); } // ソフトキー2が離された時に実行 if(param == this.SOFT_KEY_2){ try { // カメラ機能の起動 w_camera.takePicture(); } catch (Exception ce) {} // カメラオブジェクトに保持されている画像を、メディアイメージの形式で取得 MediaImage w_media = w_camera.getImage(0); try { w_media.use(); } catch (Exception ce) {} // メディアイメージからイメージオブジェクトを取得 Image w_image = w_media.getImage(); // ラベル画像を設定・変更 w_imagelabel.setImage(w_image); // 結果表示 w_textbox.setText("撮影完了"); } } // ソフトキーが押されたときに実行 // ※今回は使用しないが、記述しておかないとコンパイルエラーになる public void softKeyPressed(int param){ } // キーが離されたときに実行 public void keyReleased(Panel panel,int param){ if (param == Display.KEY_1) { // 画像をScratchPad-0に取り込む imageSave(0); } if (param == Display.KEY_2) { // 画像をScratchPad-1に取り込む imageSave(1); } if (param == Display.KEY_3) { // 画像をScratchPad-2に取り込む imageSave(2); } if (param == Display.KEY_4) { // 画像をScratchPad-0から表示 imageDisplay(0); } if (param == Display.KEY_5) { // 画像をScratchPad-1から表示 imageDisplay(1); } if (param == Display.KEY_6) { // 画像をScratchPad-2から表示 imageDisplay(2); } } // キーが押されたときに実行 ※今回は無し public void keyPressed(Panel panel,int param){ } // 画像"w_num"をScratchPadに取り込む public void imageSave(int w_num) { // 変数の宣言 InputStream w_in,w_sp; OutputStream w_out; byte[] w_data; int w_length,ww_sp=0; // ScratchPadの先頭1バイトに何も入っていない場合、imageファイルを読む try { // 入力ストリームを取得 w_in=w_camera.getInputStream(0); // ScratchPadへの出力ストリームを取得 w_out=Connector.openOutputStream("scratchpad:///0;pos="+w_num * 10000); // 入力ストリームから出力ストリーム(ScratchPad)へ、順次、書き込む w_data=new byte[128]; while ((w_length=w_in.read(w_data)) != -1 ) { w_out.write(w_data,0,w_length); } // 入力ストリームをクローズ w_in.close(); // 出力ストリームをクローズ w_out.close(); } catch (Exception e){} // 結果表示 w_textbox.setText("画像保存"+w_num); } // 画像"w_num"をScratchPadから表示 public void imageDisplay(int w_num) { // ScratchPadから、メディアイメージを取得 MediaImage w_media=null; try { w_media = MediaManager.getImage("scratchpad:///0;pos="+w_num * 10000); w_media.use(); } catch (Exception ce) {} // メディアイメージからイメージオブジェクトを取得 Image w_image = w_media.getImage(); // ラベル画像を設定・変更 w_imagelabel.setImage(w_image); // 結果表示 w_textbox.setText("画像表示"+w_num); } } } |
||
<サンプル 43>
カメラ画像の送信
※カメラ機能の起動→撮影画像を取得→表示
→同時に、撮影した画像をサーバへ送信
| 実行結果 ※FOMA N2051で確認 |
![]() |
1.iアプリ起動時は、空白画面です。 2.「撮影」ボタンを押すと、 カメラ機能の起動が行われ、 カメラ操作画面に切り替わります。 3.撮影が終了すると、 再び、iアプリに切り替わり、 撮影画像が表示されます。 4.同時に、撮影した画像をサーバへ送信します。 |
| プロブラムソース "test43.java" | ★ソースダウンロードサイトへ★ | |
| // パッケージのインポート import java.io.*; import javax.microedition.io.*; import com.nttdocomo.io.*; import com.nttdocomo.ui.*; import com.nttdocomo.opt.ui.*; // IApplicationのサブクラスとして"test43"を宣言 // ※IApplicationは、iアプリ作成時、必須クラスです。 public class test43 extends IApplication { // 初期化処理 // ※iアプリ起動時に、この"start"メソッドが呼ばれる public void start() { // "mypanel"オブジェクトを生成 mypanel w_panel = new mypanel(); // ソフトキー1のラベルに"終了"を設定 w_panel.setSoftLabel(w_panel.SOFT_KEY_1,"終了"); // ソフトキー2のラベルに"撮影"を設定 w_panel.setSoftLabel(w_panel.SOFT_KEY_2,"撮影"); // 現在の画面に設定 Display.setCurrent(w_panel); } // Panelのサブクラスとして"mypanel"を宣言 class mypanel extends Panel implements SoftKeyListener { // 変数の宣言 private Camera w_camera; private ImageLabel w_imagelabel; private TextBox w_textbox; public mypanel(){ // カメラオブジェクトの取得 w_camera = Camera.getCamera(0); // イメージオブジェクトをもつイメージラベルを作成 w_imagelabel = new ImageLabel(); // パネルに追加 add(w_imagelabel); // テキストボックス(処理結果表示用) w_textbox = new TextBox("テキストボックス", 16, 1, TextBox.DISPLAY_ANY); // パネルに追加 add(w_textbox); // イベントリスナーのインスタンス登録 // ソフトキーリスナー setSoftKeyListener(this); } // ソフトキーが離されたときに実行 public void softKeyReleased(int param){ // ソフトキー1が離された時に実行 if(param == this.SOFT_KEY_1){ // iアプリ終了 terminate(); } // ソフトキー2が離された時に実行 if(param == this.SOFT_KEY_2){ try { // カメラ機能の起動 w_camera.takePicture(); } catch (Exception ce) {} // カメラオブジェクトに保持されている画像を、メディアイメージの形式で取得 MediaImage w_media = w_camera.getImage(0); try { w_media.use(); } catch (Exception ce) {} // メディアイメージからイメージオブジェクトを取得 Image w_image = w_media.getImage(); // ラベル画像を設定・変更 w_imagelabel.setImage(w_image); // 画像を送信 w_textbox.setText("画像送信中"); imageOut(); } } // ソフトキーが押されたときに実行 // ※今回は使用しないが、記述しておかないとコンパイルエラーになる public void softKeyPressed(int param){ } // 画像を送信 public void imageOut() { // 変数の宣言 HttpConnection w_connect; InputStream w_in; OutputStream wo_stream; byte[] w_data; int w_length; try { // 入力ストリームを取得 w_in=w_camera.getInputStream(0); // 出力先への接続を設定 String w_url = new String(getSourceURL()+"test43.cgi"); w_connect = (HttpConnection)Connector.open(w_url,Connector.READ_WRITE,true); // 要求メソッドとコンテンツタイプを設定 w_connect.setRequestMethod(HttpConnection.POST); w_connect.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 出力ストリームを取得 wo_stream = w_connect.openOutputStream(); // 入力ストリームから出力ストリームへ、順次、書き込む w_data=new byte[128]; while ((w_length=w_in.read(w_data)) != -1 ) { wo_stream.write(w_data,0,w_length); } // 入力ストリームをクローズ w_in.close(); // 出力ストリームをクローズ wo_stream.close(); // 実際に接続 w_connect.connect(); // 入力ストリームを取得 InputStream wi_stream = w_connect.openInputStream(); // InputStreamReaderインスタンスを作成 // ※SJISをUnicodeに変換 InputStreamReader wi_buffer = new InputStreamReader(wi_stream); // StringBufferインスタンスを作成 StringBuffer w_StringBuffer = new StringBuffer(); // CGIから送信されたストリームを読取 String w_remsg; int w_char; while ((w_char = wi_buffer.read()) != -1) { w_StringBuffer.append((char)w_char); } w_remsg = (String)w_StringBuffer.toString(); // メッセージ表示領域に、CGIからの返答メッセージを設定 w_textbox.setText(w_remsg); // 入力ストリームをクローズ wi_stream.close(); // 接続をクローズ w_connect.close(); } catch (Exception e){w_textbox.setText("画像書込エラー");} } } } |
||
<サーバ側CGI>※Perl言語使用
画像出力専用のCGIプログラム
※iアプリから送信された画像を、サーバ上に出力する。
<仕様>
・iアプリから送信された画像を読み込む
・画像を出力(print)する
<関連ファイル等>
test43.jpg :画像出力用ファイル
| プロブラムソース "test43.cgi" | ||
| ※iアプリからの要求により、サーバ側で動作。Perl言語使用。 | ||
| #!/usr/bin/perl # データの受信 binmode(STDIN); read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'} ); # 画像の出力 print "Content-type: image/jpg\n\n"; open(IMG,">test43.jpg"); binmode(IMG); print IMG $buffer; close(IMG); # 書込み完了メッセージ出力 print "画像 書込完了"; |
||
DoJa-2.1プロファイルでは、携帯電話の個体識別情報の参照が可能になりました。
※この機能を利用する場合、ADFのGetUtnキーに"terminalid"の指定が必要です。
| メソッド名 | メソッドの機能 |
| getProperty() | 携帯電話の個体識別情報の取得 <プロパティ値> ・TERMINAL_ID:携帯電話本体の識別情報 ・USER_ID:ICチップカードの識別情報 |
<サンプル 23>
個体識別情報取得
※iアプリを起動すると、携帯電話の個体識別情報が画面に表示されます。
| 実行結果 ※FOMA N2051で確認 |
![]() |
|
| プロブラムソース "test23.java" | ★ソースダウンロードサイトへ★ | |
| // パッケージのインポート import com.nttdocomo.ui.*; import com.nttdocomo.util.*; // IApplicationのサブクラスとして"test23"を宣言 // ※IApplicationは、iアプリ作成時、必須クラスです。 public class test23 extends IApplication { // 初期化処理 // ※iアプリ起動時に、この"start"メソッドが呼ばれる public void start() { // "mycanvas"オブジェクトを生成 mycanvas w_canvas = new mycanvas(); // ソフトキー1のラベルに"終了"を設定 w_canvas.setSoftLabel(w_canvas.SOFT_KEY_1,"終了"); // 現在の画面に設定 Display.setCurrent(w_canvas); } // Canvasのサブクラスとして"mycanvas"を宣言 class mycanvas extends Canvas { // 描画メソッド public void paint(Graphics g) { // 携帯電話の個体識別情報の取得 String w_property; w_property = Phone.getProperty(Phone.TERMINAL_ID); // 個体識別情報をX軸=10、Y軸=30ドットの位置に描画 g.drawString(w_property, 10, 30); } // イベント処理 // ※低レベルイベントが発生すると、この"processEvent"メソッドが呼ばれる public void processEvent(int w_type,int w_param) { // ソフトキー1が押された場合に処理 if ((w_type==Display.KEY_PRESSED_EVENT) && (w_param==Display.KEY_SOFT1)) { // アプリケーション終了 terminate(); } } } } |
||
目次 |
前頁 |
All Rights Reserved. (c)Copyright omori 2003