2007年10月1日 星期一

有關J2ME與Camera

最近在整理與評估J2ME與Symbian C++對於camera的支援程度,感覺還蠻多東西要survey的。

最近幾年新增的J2ME JSR,並找了之後camera會使用到的JSR

JSR-135 MMAPI (Mobile Media API)

JSR-234 高階多媒體補充AMMS (Advanced Multimedia Supplements)

JSR 226 延展性2D 向量圖應用程式 (Scalable 2D Vector Graphics API for J2ME)

目前確定的在MMAPI上N95目前可順利執行,且抓圖也正常。

JSR-234與JSR-226在N95上確定支援,似乎只有S60 3nd FP1的手機才支援(N80不支援)。不過也發現Sun也有提供J2ME Device Table讓使用者查詢手機支援JSR的程度。

Nokia N95支援的JSR Profile
CLDC 1.1 (basic)
MIDP 2.0
(basic)
M3DAPI 1.0
Scalable 2D Vector Graphics
MMAPI / JSR 135
Web Services
Bluetooth
Adv Multimedia Supp / JSR 234
Nokia UI API
SATSA
Location API
PDA Optional
WMA 2.0 / JSR 205
SIP API
JTWI
Nokia官方網站也有詳細N95的規格

MMAPI抓取內置相機的方式
//利用Player去抓取內置相機路徑
Player player = Manager.createPlayer( "capture://video" );
※注意:如果要進行拍照, 且要輸出為jpeg格式時, 必需要將"capture://video"改為"capture://devcam0"才可正常在MIDlet上正確顯示
//初始化
player.realize();
//抓取Video control
VideoControl videoControl = (VideoControl) ( player.getControl("VideoControl") );
//設定Display mode
videoControl.initDisplayMode( VideoControl.USE_DIRECT_VIDEO, this );
//設定video顯示位置
videoControl.setDisplayLocation(x, y);
//設定video顯示大小
videoControl.setDisplaySize( Width, Height );

使用MMAPI錄音
//建立手機內置錄音的資料來源(DataSource)
Player p = Manager.createPlayer("capture://audio");
p.realize();
RecordControl rc = (RecordControl)p.getControl("RecordControl");
//設定儲存位置
rc.setRecordLocation("file:/tmp/audio.wav");
rc.startRecord(); //開始紀錄
p.start(); //錄音五秒
Thread.currentThread().sleep(5000);
p.stop(); //停止
rc.stopRecord(); //停止紀錄
rc.commit(); //完成
使用MMAPI拍一張照片
//從camera抓取一張照片, 如果傳入值設定為null時, 抓取格式為系統預設值.
byte[] pngImage = videoControl.getSnapshot( null );

也可以把null替換成下列格式,抓取所想要的圖片格式
encoding=gray8&width=160&height=120
encoding=jpeg&quality=80&progressive=true&type=jfif
(progressive JPEG with quality 80 in jfif format)
encoding=jpeg&type=exif
(JPEG in exif format)
encoding=png&colors=rgb888
(24 bits/pixel PNG)
encoding=rgb888
(raw 24-bit rgb image)
encoding=rgb&colors=rgb888
(raw 24-bit rgb image)

//example
byte[] pngImage = videoControl.getSnapshot( "encoding=png&colors=rgb888 " );

//最後再將取得的data建立成image, 並draw出來
Image image = Image.createImage(pngImage, 0, pngImage.length);
g.drawImage(image, 0 , 0 , 0);
以上階為程式片段。

5 則留言:

ahjay 提到...

不好意思 因為做專題可能會使用到 可以跟您要這三段程式的全部嗎?
可以的話請寄到loirend@yahoo.com.tw
謝謝您

nchu 提到...

您好:因為做專題需要用到MMAPI抓取內置相機的方式,是否可以請您給我這段的程式呢??
謝謝
我的MAIL:lkmsj@yahoo.com.tw

豬頭 提到...

專題也要用到
可以請妳把全碼傳給我嗎?!
ebullient_sky@hotmail.com

tower 提到...

妳好 :因為做專題需要用到錄音的程式
是否可以給我這段程式的全部ㄋ
謝謝
我的mail:coreygogo@yahoo.com.tw

金石微開 提到...

您好,我對撰寫此方面的手機程式有興趣,能否請您寄給小弟完整的程式碼呢?

flowercatswets@yahoo.com.tw