- PR -

スクラッチパッドを使ってiアプリを実行

投稿者投稿内容
Redmoon1010
会議室デビュー日: 2006/05/08
投稿数: 5
投稿日時: 2006-05-08 23:21
ご指導お願いします。
Doja3.5でiアプリを作っています。実機でテストをしたいのですが、jam,jarファイルだけでは動作しないみたいです。
スクラッチパッドを使って画像などを読み込めばできそうなのですが、スクラッチパッドの書き込み方がわかりません。

スクラッチパッドをどのように使えばいいのか教えていただけないでしょうか。
素人の質問ですみませんが、よろしくお願いします。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-05-09 00:34
引用:

Redmoon1010さんの書き込み (2006-05-08 23:21) より:
スクラッチパッドを使って画像などを読み込めばできそうなのですが、スクラッチパッドの書き込み方がわかりません。

スクラッチパッドをどのように使えばいいのか教えていただけないでしょうか。
素人の質問ですみませんが、よろしくお願いします。



http://www.atmarkit.co.jp/fmobile/rensai/doja04/doja04.html
http://2php.jp/iapp/scratchpad.html

で十分だと思いますが、、、「どのように」は不発揮性メモリなので、
適当に使えばいいのでは。

私もいまいち「スクラッチパッド」は分かってませんが。キーはアプリケーションごとで
iあぷりが二つ
a.jar
b.jar
があるとして
a.jar
でscratchpad:///0;pos=0
に書き込んで
b.jar
でscratchpad:///0;pos=0を読み込んだら
データaとbで同じなのだろうか。

、、同じなんだろうなぁ。でも、上記の説明だと「アプリケーションごと」
になってるけど、、どっちだろ。

a書き込み==b読み込みだったら「アプリケーションごと」と違うぢゃん。
と思い。

Redmoon1010
会議室デビュー日: 2006/05/08
投稿数: 5
投稿日時: 2006-05-09 03:24
レスありがとうございます。

http://www.atmarkit.co.jp/fmobile/rensai/doja04/doja04.html
↑の通りに全部コピしてやったんですが、以下のようなエラーで。。。
全くの素人ですので何がなんだかサッパリです。涙

java.lang.NullPointerException
at com.nttdocomo.ui.ImageLabel.setImage(+1)
at GCTest.componentAction(+22)
at com.nttdocomo.ui.Panel.fireComponentEvent(+26)
at com.nttdocomo.ui.AbstractButton.processEvent(+91)
at com.nttdocomo.ui.Panel.processEvent(+39)
at com.nttdocomo.ui.EventHandler.handleKeyEvent(+211)
at com.nttdocomo.ui.EventHandler.run(+180)

もういちど全部見直してみます。
くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-05-09 10:27
こんにちわ。

引用:

Redmoon1010さんの書き込み (2006-05-08 23:21) より:
Doja3.5でiアプリを作っています。実機でテストをしたいのですが、jam,jarファイルだけでは動作しないみたいです。



エミュレータでは上手くのに、実機テストで失敗するって事でしょうか?
Redmoon1010
会議室デビュー日: 2006/05/08
投稿数: 5
投稿日時: 2006-05-10 06:28
レスありがとうございます。

>エミュレータでは上手くのに、実機テストで失敗するって事でしょうか?
いえ。エミュレーターですらできていません。
しかし実機でなら・・・という淡い希望を抱いてやってみましたがやっぱりだめでした。(苦笑

抽象的な書き方ですみませんでした。

具体的には、アプリで画像や音楽を使いたいんですが、スクラッチパッドの保存、読み込み、書き込みのソースはどこにどうやって書けばいいのかわからなくて困っているとこです。

わかる部分があれば、教えていただけませんか?
ひら
ぬし
会議室デビュー日: 2005/03/04
投稿数: 260
投稿日時: 2006-05-10 09:53
趣旨とはちょっとかけ離れてしまうかもしれませんが、画像や音楽はスクラッチパッドではなくjarに格納したほうが良いようです。

コード:
	/**画像を取得*/
	private Image getImage()
	{
		MediaImage image=MediaManager.getImage("resource:///1.gif");
		try {
			image.use();
		}catch (com.nttdocomo.io.ConnectionException e)
		{
			System.out.println(e);
		}
		return image.getImage();

	}

くれよん
ベテラン
会議室デビュー日: 2005/04/28
投稿数: 74
投稿日時: 2006-05-10 11:38
こんにちわ。
エラーを見る限り、スクラッチパッド以外の部分がエラーを吐いている様に見えます(たぶん)。

ついでに、URLに載っているサンプル改造して実行しましたが、上手く動作しました。
サンプルを載せときます。importは書き加えてください。
スクラッチパッドへの書き込み、読み込み部分はURLのサンプルプログラムをコピーしました。
画像をカメラで撮影する様に変えてみました。
i回目起動時に (i-1)回目起動時の最後に撮影した画像が表示されます。


PadTest.java--------------
public class PadTest extends IApplication{
ImageCanvas cc = new ImageCanvas();
public void start(){
Display.setCurrent(cc);
}
}

ImageCanvas.java---------
public class ImageCanvas extends Canvas{
private static int offset = 0;

public ImageCanvas(){
try{
setSoftLabel(Frame.SOFT_KEY_1, "カメラ");
setSoftLabel(Frame.SOFT_KEY_2,"終了");
}catch(Exception e){
Dialog d = new Dialog(Dialog.DIALOG_ERROR, "エラー詳細");
d.setText("コンストラクタエラー " + e);
d.show();
}
}

//画面表示
public void paint(Graphics g){
try{
Image image = getImageFromScratchpad(offset);
g.lock();
g.clearRect(0, 0, getWidth(), getHeight());
System.out.println("画像はnull?"+image==null);
if (image != null){
g.drawImage(image, 0, 0);
}
g.unlock(true);
}catch (Exception e){
System.out.println(e);
Dialog d = new Dialog(Dialog.DIALOG_ERROR, "エラー詳細");
d.setText("描画エラー " + e);
d.show();
}
}

public void processEvent(int type, int param){
//キーが押されたら
if(type == Display.KEY_PRESSED_EVENT){
if(param == Display.KEY_SOFT1){
//撮影
byte[]data = snap();
writeToScratchpad(data, offset);
}
if (param == Display.KEY_SOFT2){
IApplication.getCurrentApp().terminate();
}
}
}

//撮影ルーチン
private byte[] snap(){
byte[] img_buf = null;
try{
//引数0はカメラID:0,1,2,.....
Camera camera = Camera.getCamera(0);
           //画像の撮影可能サイズの取得
int pictureSize[][] = camera.getAvailablePictureSizes();

//撮影画像のサイズを設定(てきとー)
camera.setImageSize(pictureSize[0][0],pictureSize[0][1]);
//カメラの属性を設定 //連写モードの設定を行う //連写モード無効
camera.setAttribute(Camera.DEV_CONTINUOUS_SHOT, Camera.ATTR_CONTINUOUS_SHOT_OFF);
//カメラの属性を設定 //画質の設定を行う //画質優先:ATTR_QUALITY_HIGH 標準:ATTR_QUALITY_STANDARD
camera.setAttribute(Camera.DEV_QUALITY, Camera.ATTR_QUALITY_HIGH);
//静止画を撮影
camera.takePicture();
//撮影した画像を取得
MediaImage mi = camera.getImage(0);
mi.use();

//Imageデータへ変換
Image img = mi.getImage();
mi.unuse();
///////////////////////////////////////////////////////////////////
//静止画の大きさのbyteデータを保存する領域の確保
int img_length = (int)camera.getImageLength(0);
img_buf = new byte[img_length];
//画像を読み出すための 入力ストリームを取得
InputStream inStream = camera.getInputStream(0);
//img_bufにイメージのバイトデータを保存
inStream.read(img_buf);
inStream.close();
}catch(Exception e){
System.out.println(e);
Dialog dia = new Dialog(Dialog.DIALOG_ERROR, "撮影をキャンセル");
dia.setText(e+"\n");
dia.show();
}

return img_buf;
}

//書き込み
private void writeToScratchpad(byte[] data, int offset){
OutputStream out = null;

try{

out = Connector.openOutputStream("scratchpad:///0;pos=" + offset);
out.write(data);
}catch (Exception e){
System.out.println(e);
Dialog dia = new Dialog(Dialog.DIALOG_ERROR, "書き込み失敗");
dia.setText(e.toString() + "\n");
dia.show();
}finally{
try{
if (out != null){
out.close();
out = null;
}
}catch (Exception e){
out = null;
}
}
}

//読み込み
private Image getImageFromScratchpad(int offset){
Image image = null;
try {
MediaImage mi = MediaManager.getImage("scratchpad:///0;pos=" + offset);
mi.use();
image = mi.getImage();
}catch (Exception e){
System.out.println(e);
Dialog dia = new Dialog(Dialog.DIALOG_ERROR, "読み込み失敗");
dia.setText(e.toString() + "\n");
dia.show();
}

return image;
}
}

[ メッセージ編集済み 編集者: クレやん 編集日時 2006-05-10 12:01 ]
Redmoon1010
会議室デビュー日: 2006/05/08
投稿数: 5
投稿日時: 2006-05-10 19:29
引用:

ひらさんの書き込み (2006-05-10 09:53) より:
趣旨とはちょっとかけ離れてしまうかもしれませんが、画像や音楽はスクラッチパッドではなくjarに格納したほうが良いようです。



ありがとうございます!
MediaManagerでやってみます!

スキルアップ/キャリアアップ(JOB@IT)