免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
用MMAPI拍照 - powinder

作者: Jonathan Knudsen
時間: July 2003
原文出處: http://developers.sun.com/techtopics/mobility/midp/articles/picture/
源碼下載:
http://developers.sun.com/techtopics/mobility/midp/articles/picture/src/Snapper.zip
譯者注:因為該文成文時間很早,而J2ME技術(shù)發(fā)展很快,文中提到的開發(fā)工具和運行測試環(huán)境現(xiàn)在都有較大變動,請讀者注意。

譯文

概述

    Mobile Media API(MMAPI)讓MIDlet能夠播放和錄制音頻和視頻數(shù)據(jù).但是設(shè)備的真實能力還是依賴于其具體實現(xiàn)。目前,支持MMAPI的唯一設(shè)備是Nokia 3650.本文描述了如何利用MMAPI來構(gòu)建一個簡單的拍照程序。

開發(fā)MMAPI應(yīng)用程序所用工具


     構(gòu)建MMAPI應(yīng)用程序的第一個難題是找到正確的開發(fā)工具.J2ME Wireless Toolkit 2.0 支持MIDP2.0,MMAPI 1.0,WMA1.1.乍一看,它包括了你所要的一切.但是Nokia 3650只能運行MIDP1.0,不能運行 MIDP2.0.為了開發(fā)MIDP1.0的應(yīng)用程序,你需要J2ME Wireless Toolkit的1.0.4版,外帶一個支持 MMAPI的模擬 器。
    Sun提供這樣一個模擬器,你可以在MMAPI的主頁上找到(http://java.sun.com/products/mmapi/index.jsp).盡管你可以利用該模擬器構(gòu)建MMAPI應(yīng)用程序,但是它不支持拍照,因此你不能用它來測試拍照的應(yīng)用程序。
    Nokia有一個支持拍照的模擬器,它是Nokia Series 60 MIDP Concept SDK Beta 0.2的一個組成部分.你可以在Nokia的開發(fā)者論壇(http://www.forum.nokia.com)上找到.文件的名字是nS60_jme_concept_sdk_b0_2_014.zip,Linux開發(fā)者應(yīng)該是用2.0版的Nokia Developer's Suite for J2ME(http://www.forum.nokia.com/nds_for_j2me.html),下面的安裝指南只適用于windows環(huán)境。
     首先,在<J2ME Wireless Toolkit>\wtklib\devices目錄下安裝Nokia SDK(把 Nokia_Series_60_MIDP_Concept_SDK_Beta_0_2的安裝目錄拷貝到這個目錄亦可).接下來,運行 J2ME Wireless Toolkit,你就有一個額外的模擬器-- Nokia_Series_60_MIDP_Concept_SDK_Beta_0_2可用了。選擇該模擬器后,你就可以構(gòu)建和測試你的MMAPI應(yīng)用程 序了。該模擬器和真實的Nokia 3650看起來非常相似。

MMAPI的測試設(shè)備


    沒有什么能替代真機測試。從長遠觀點來看,將會有很多設(shè)備支持MMAPI,但是 Nokia 3650是目前唯一支持MMAPI的設(shè)備.有好幾種方式可以在Nokia 3650真機上發(fā)布MIDlet.我使用紅外接口在我的筆記本和手 機上傳輸文件。你也可以使用藍牙和OTA.

獲取照相機


    MIDlet中拍照(正式的說法叫視頻捕捉)的第一步是從Manager獲取一個Player。一個特殊的定位符:capture://video,指示照相機使用缺省的圖片大小來拍照。
    mPlayer = Manager.createPlayer("capture://video");
如果設(shè)備不支持視頻捕捉,這將會拋出一個MediaException。你可以預(yù)先檢查一下設(shè)備是否支持拍照,如果系統(tǒng)屬性supports.video.capture的值為真,那么該設(shè)備就支持照相功能。
    為了獲取拍照所需資源,Player需要被realize.如果你沒有學(xué)過或者忘記了realized是什么意思,請參考<Mobile Media API Overiew>(http://developers.sun.com/techtopics/mobility/apis/articles/mmapi_overview/)或者J2ME Mobile Media API.

mPlayer.realize();


顯示相機視頻


    來源于照相機的視頻可以作為一個Item添加到Form上,也可以作為Canvas的一部分。一個VideoControl可以讓你實現(xiàn)這個功能,你可以采用如下語句獲取VideoControl.
    
mVideoControl = (VideoControl)
        mPlayer.getControl("VideoControl");

     如果你希望在Canvas里面顯示來源于相機的視頻,初始化VideoControl,然后在Canvas里面設(shè)置視頻的大小和位置,最后使視頻可見。下 面的例子(一個Canvas字類的構(gòu)造函數(shù))顯示了如何把視頻擺放在離Canvas上下邊框2個像素寬的位置。如果不能這樣放置,構(gòu)造函數(shù)試著使用整個屏 幕,最后,它調(diào)用setVisible()使視頻可見.
    public CameraCanvas(SnapperMIDlet midlet,
    VideoControl videoControl) {
  int width = getWidth();
  int height = getHeight();
  
  mSnapperMIDlet = midlet;
  
  videoControl.initDisplayMode(
      VideoControl.USE_DIRECT_VIDEO, this);
  
  try {
    videoControl.setDisplayLocation(2, 2);
    videoControl.setDisplaySize(width - 4, height - 4);
  }
  catch (MediaException me) {
    try { videoControl.setDisplayFullScreen(true); }
    catch (MediaException me2) {}
  }
  videoControl.setVisible(true);
}

在Form里面顯示視頻稍微有所不同.我們不再用USE_DIRECT_VIDEO參數(shù)調(diào)用VideoControl的initDisplayMode(),而是代之以USE_GUI_PRIMITIVE參數(shù)。在MIDP設(shè)備上,你可以獲得一個Item顯示在Form上

Form form = new Form("Camera form");
Item item = (Item)mVideoControl.initDisplayMode(
    GUIControl.USE_GUI_PRIMITIVE, null);
form.append(item);

拍照


一旦相機視頻顯示在設(shè)備上,拍照就很容易了.你所需要的只是調(diào)用一下VideoControl的getSnapshot ()方法。為了調(diào)用該方法,你需要傳遞一個圖片類型參數(shù),如果你使用null作參數(shù),那么相機就會適用缺省的圖片類型?PNG.通過獲取用空格隔開的系統(tǒng) 屬性video.snapshot.encodings的值,你可以預(yù)先獲取相機支持的圖片類型。

    The getSnapshot ()方法返回一個字節(jié)數(shù)組,里面是按你所指定的圖片格式的圖片數(shù)據(jù)。接下來,你就可以隨意行事了,你可以把這個字節(jié)數(shù)組存儲在數(shù)據(jù)庫里,也可以把它發(fā)到服 務(wù)器上去,或者依據(jù)這個字節(jié)數(shù)組構(gòu)造一個Image對象,這樣你就可以把剛才所拍照片顯示在用戶面前,如下例所示:
    byte[] raw = mVideoControl.getSnapshot(null);
    Image image = Image.createImage(raw, 0, raw.length);

創(chuàng)建微縮圖


在這篇文章中,我想要談?wù)勅绾蝿?chuàng)建微縮圖片,也就是使所拍的相片縮小化。這事看起來簡單,其實卻并不輕松。 MIDP2.0中包含一些方法,這些方法可以從Image對象中獲取原始的像素數(shù)據(jù),有可能實現(xiàn)圖像的伸縮變換。不幸的是,MIDP1.0并不提供對像素 數(shù)據(jù)的直接訪問。
從圖像處理角度來看,我這里采用的解決辦法既不優(yōu)雅,也不嚴格正確。但是這種辦法接近我所需要的效果,并且不涉及到手工解析 PNG格式。我創(chuàng)建了一個新的空白的圖片作為微縮圖,對于圖片的每個像素,我設(shè)置一個圍繞該像素的極小的剪切區(qū)。然后把原始圖片繪制在一個適當(dāng)?shù)奈恢蒙? 這樣就設(shè)置了微縮圖的每一個像素.

private Image createThumbnail(Image image) {
  int sourceWidth = image.getWidth();
  int sourceHeight = image.getHeight();
  
  int thumbWidth = 64;
  int thumbHeight = -1;
  
  if (thumbHeight == -1)
    thumbHeight = thumbWidth * sourceHeight / sourceWidth;
  
  Image thumb = Image.createImage(thumbWidth, thumbHeight);
  Graphics g = thumb.getGraphics();
  
  for (int y = 0; y < thumbHeight; y++) {
    for (int x = 0; x < thumbWidth; x++) {
      g.setClip(x, y, 1, 1);
      int dx = x * sourceWidth / thumbWidth;
      int dy = y * sourceHeight / thumbHeight;
      g.drawImage(image, x - dx, y - dy,
          Graphics.LEFT | Graphics.TOP);
    }
  }
  
  Image immutableThumb = Image.createImage(thumb);
  
  return immutableThumb;
}

Snapper例子


從本文下載的源代碼是一個叫做Snapper的程序。Snapper讓你可以把所拍照片的所有微縮圖都顯示 在一個Form里.本文所引用的代碼來源于Snapper.Snapper程序僅包含2個類。SnapperMIDlet提供應(yīng)用邏輯和視圖流程控制,與 絕大部分的MMAPI代碼相似,需要創(chuàng)建Player,獲取snapshot.CameraCanvas是一個Canvas的子類,它包含一個 VideoControl來顯示相機視頻。
    Snapper能聰明的發(fā)現(xiàn)目標(biāo)設(shè)備是否支持視頻捕捉,如果你在Sun的MME模擬器上運行該程序,你會收到一個優(yōu)雅的反饋信息:
  
在不支持視頻捕捉的設(shè)備上運行Snapper
如果你使用Nokia的Concept模擬器,你將看到如下效果:
  
Snapper的主屏
選擇Camera命令(Nokia機型把該命令放在Options菜單里),在一臺真機上,你可以看到來源于攝像頭的視頻,模擬器只能顯示單幅的靜態(tài)圖像。但是在這2種情況下,CameraCanvas都會在視頻周圍畫上一個綠框。
 
Snapper的攝像機屏幕
要拍照的話,你只需選擇Capture命令或者按開火鍵(位于方向鍵中心),Snapper將創(chuàng)建一個微縮圖片并顯示在MIDlet的主屏上。
  
放置了微縮圖的Snapper主屏

未來的改進


Snapper是一個非常簡單的例子,但是有很多有趣的地方你可以改進。
1.你可以把整個相片保存在數(shù)據(jù)庫里,這樣你可以在今后瀏覽。
2.你可以允許玩家刪除相片,或者改變其次序
3.你可以把整個相片發(fā)送到一個服務(wù)器上存儲起來,并且提供一個Web視圖進行瀏覽。
4.使用MIDP2.0,你可以對圖片做標(biāo)準(zhǔn)的變換處理:模糊,銳化,顏色反轉(zhuǎn),幾何變換等等。

總結(jié)

   MMAPI是一個靈活而強大的API,它讓開發(fā)者能表現(xiàn)和捕獲音頻和視頻數(shù)據(jù)。本文描述了MMAPI的拍照功能,所需工具, 以及如何編寫拍照的MIDlet. Snapper例子實現(xiàn)了拍照功能和微縮圖功能。你只要稍作加工,該例子就可以成為一個網(wǎng)絡(luò)相片共享程序的基礎(chǔ).

關(guān)于作者


    Jonathan Knudsen出了好幾本書,包括《Wireless Java  (second edition)》,《The Unofficial Guide to LEGO MINDSTORMS Robots》, 《Learning Java (second edition)》,《Java 2D Graphics》。Jonathan在Java 和  Lego robots方面廣泛寫作,他還為JavaWorld, EXE, NZZ Folio,  and the O'Reilly Network寫文章. Jonathan在普林斯頓大學(xué)獲得了機械工程學(xué)位.
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Taking Pictures with MMAPI
通過Push信息來自動啟動JAVA移動應(yīng)用程序 - [Matrix - 與 Java 共舞...
MIDP和MIDlet
J2ME(CLDC/MIDP)簡介
j2me中的MIDlet類說明
基于Java的移動游戲開發(fā)入門
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服