2012-03-08 143 views
1

我想从捕捉video一个LWUITImage。问题是,MediaException提高调用getSnapshot()时:在“CameraCanvas”视频捕捉问题

private void showCamera() // called when clicking the "open camera" command 
    { 
     try 
     { 
      Player mPlayer; 
      VideoControl mVideoControl; 
      mPlayer = Manager.createPlayer("capture://video"); 
      mPlayer.realize(); 
      mVideoControl = (VideoControl) mPlayer.getControl("VideoControl"); 
      Canvas canvas = new CameraCanvas(this, mVideoControl, mPlayer, getFirstAvailableRoot(), "ADC"+adcId); // adcId is "1" 
      isFromPositionnement = true; // static variable 
      javax.microedition.lcdui.Display.getDisplay(controler).setCurrent(canvas); 
      mPlayer.start(); 
     } catch (IOException ex) { 
      handleException(); 
     } catch (MediaException ex) { 
      handleException(); 
     } 
    } 

private String getFirstAvailableRoot() 
    { 
     short iter; 
     String root = "Phone:/"; 
     iter = 0; 
     Enumeration drives = FileSystemRegistry.listRoots(); 
     while(drives.hasMoreElements() && iter < 1) { 
      root = String.valueOf(drives.nextElement()); 
      iter++; 
     } 
     return root; 
    } 

代码:

public class CameraCanvas extends Canvas implements CommandListener 
    { 
     ... 
     public CameraCanvas(Ecran form, VideoControl videoControl, Player pPlayer, String pRoot, String dossierPhoto) 
     { 
      ... 
      mCaptureCommand = new Command("Capturer", Command.SCREEN, 1); 
      addCommand(mCaptureCommand); 
      setCommandListener(this); 
      ... 
      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); 
     } 
     private void capture() // called when clicking the mCaptureCommand command 
     { 
      try 
      { 
       isPhotoCaptured = true; 
       rawImg = vidCtrl.getSnapshot(null); // this throws the exception 
       vidCtrl.setVisible(false); 
       vidCtrl = null; 
       mPlayer.close(); 
       mPlayer = null; 
       repaint(); 
      } 
      catch (MediaException me) 
      { 
       isPhotoCaptured = false; 
       rawImg = null; 
       vidCtrl.setVisible(false); 
       vidCtrl = null; 
       mPlayer.close(); 
       mPlayer = null; 
       handleException("capture "); 
      } 
     } 
    } 

那么,什么可能是问题的原因是什么?

+0

我不知道很多关于帆布/ LCDUI。 ¿您可以使用LWUIT UI元素吗? – frayab 2012-03-08 08:55:31

+0

将它转换为LWUIT将是一件困难的工作! – pheromix 2012-03-08 09:19:23

+0

我有像你这样的问题,看看如何在LWUIT捕捉图像这个例子中,我希望这可以帮助您http://stackoverflow.com/questions/7742397/how-to-capture-images-using-lwuit-videocomponent/7796680#7796680 – frayab 2012-03-08 09:28:03

回答

1

MMAPI具有创建的图像的能力,并且可以很容易地把它转化为一个LWUIT图像(其具有创建接受一个对象图像)。但是,出于某种原因,提出此API的“天才”会将图像捕获为受限制的API以保护您的隐私。因此,如果没有操作员/制造商签名,就无法调用此API。