/* iアプリでのカメラからの画像取得の例 Time-stamp: "2005/12/27 Tue 15:14 hig" Saburo Higuchi 2003,2004 http://www.math.ryukoku.ac.jp/~hig/ プログラム解説等 http://sparrow.math.ryukoku.ac.jp/~hig/course/juniors_2004/09/ */ import com.nttdocomo.ui.*; import com.nttdocomo.device.*; // カメラ import javax.microedition.io.*; // スクラッチパッド import java.io.*; // スクラッチパッド import com.nttdocomo.system.*; // ImageStore マイピクチャからの選択 import com.nttdocomo.io.*; // /** IApplication または MIDlet を継承するクラス */ public class CameraSample extends IApplication { /** 起動するときに呼ばれる メソッド. 必須. */ public void start(){ CameraCanvas cc=new CameraCanvas(this); Display.setCurrent(cc); } public void resume(){ // カメラの撮影が終了してiアプリに戻ってきたときにこれが実行される } } /** Canvas を継承するクラス. */ class CameraCanvas extends Canvas { CameraSample parent; String cctitle [] = {"撮影","マイピクチャ"}; MediaImage mi; Image im; Camera cam; /** コンストラクタ. 最初に1回だけ実行される */ CameraCanvas(CameraSample m){ this.parent=m; setSoftLabel(Frame.SOFT_KEY_1, cctitle[0]); setSoftLabel(Frame.SOFT_KEY_2, cctitle[1]); // カメラの属性設定 cam=Camera.getCamera(0); cam.setAttribute(Camera.DEV_CONTINUOUS_SHOT, Camera.ATTR_CONTINUOUS_SHOT_OFF); // 連写機能オフ // n= camera.getAttribute(Camera.DEV_CONTINUOUS_IMAGES); // 連写枚数を取得 cam.setAttribute(Camera.DEV_QUALITY, Camera.ATTR_QUALITY_STANDARD); // 標準画質 = 色の数 . 他に HIGH, LOW cam.setAttribute(Camera.DEV_FRAME_SHOT, Camera.ATTR_FRAME_OFF); // フレーム付撮影不可 // sizes=camera.getAvailablePictureSizes(); // ありうる画像サイズの取得 // camera.setImageSize(int width, int height); // 画像サイズの設定 } public void paint(Graphics g){ int fheight = Font.getDefaultFont().getHeight(); g.setColor(Graphics.getColorOfName(Graphics.WHITE)); g.fillRect(0,0,getWidth(),getHeight()); // 画面を消す if ( im!=null ){ // 画像を取得済なら g.setColor(Graphics.getColorOfName(Graphics.BLACK)); g.drawString("アプリ実行中",0,0); g.drawImage(im,0,fheight); } } public void processEvent(int type, int param){ if( type==Display.KEY_PRESSED_EVENT ){ switch( param ){ case Display.KEY_SOFT1: getImageFromCamera(); break; case Display.KEY_SOFT2: getImageFromMyPicture(); break; default: } } } void getImageFromCamera(){ try{ cam.takePicture(); // 今まで resource:///pose0.gif から取得していたかわりに mi = cam.getImage(0); // 連写(したなら) 0番目の画像 mi.use(); im = mi.getImage(); } catch (Exception e){ } repaint(); } void getImageFromMyPicture(){ try{ ImageStore imst = ImageStore.selectEntry(); if( imst != null ){ int imid = imst.getId(); // 選択した画像の id. ここでは使ってない MediaImage mi2=imst.getImage(); // 選択した画像 if( mi2 != null ){ mi2.use(); im=mi2.getImage(); } } else { // 画像選択でキャンセル } } catch ( InterruptedOperationException ioe){ Dialog dlg=new Dialog(Dialog.DIALOG_ERROR, "エラー"); dlg.setText("画像の選択に失敗"); dlg.show(); } catch ( SecurityException se ){ Dialog dlg=new Dialog(Dialog.DIALOG_ERROR, "エラー"); dlg.setText("ADFの設定を再チェック!"); dlg.show(); } catch ( ConnectionException ce){ Dialog dlg=new Dialog(Dialog.DIALOG_ERROR, "エラー"); dlg.setText("接続エラー"); dlg.show(); } } } /* Local Variables: mode: java End: */