欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用MMAPI拍照 - powinder

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

譯文

概述

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

開(kāi)發(fā)MMAPI應用程序所用工具


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

MMAPI的測試設備


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

獲取照相機


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

mPlayer.realize();


顯示相機視頻


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

     如果你希望在Canvas里面顯示來(lái)源于相機的視頻,初始化VideoControl,然后在Canvas里面設置視頻的大小和位置,最后使視頻可見(jiàn)。下 面的例子(一個(gè)Canvas字類(lèi)的構造函數)顯示了如何把視頻擺放在離Canvas上下邊框2個(gè)像素寬的位置。如果不能這樣放置,構造函數試著(zhù)使用整個(gè)屏 幕,最后,它調用setVisible()使視頻可見(jiàn).
    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參數調用VideoControl的initDisplayMode(),而是代之以USE_GUI_PRIMITIVE參數。在MIDP設備上,你可以獲得一個(gè)Item顯示在Form上

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

拍照


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

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

創(chuàng )建微縮圖


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

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例子


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

未來(lái)的改進(jìn)


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

總結

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

關(guān)于作者


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

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久