-- 作者:admin
-- 发布时间:2008/11/15 15:20:43
-- 程序代码——捕获视频
import java.io.InputStream;
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; import javax.microedition.media.Manager; import javax.microedition.media.Player; import javax.microedition.media.control.VideoControl; import javax.microedition.midlet.MIDlet; import javax.microedition.rms.RecordEnumeration; import javax.microedition.rms.RecordStore;
public class Exec extends MIDlet implements CommandListener { Display display = null; DrawPanel dp = new DrawPanel(this); Form form = new Form("浏览图片"); Command start = new Command("播放视频", Command.OK, 1); Command browse = new Command("浏览图片", Command.BACK, 1); Command back = new Command("后退", Command.BACK, 1); int board = 10; VideoControl vc; Player player;
public Exec() { display = Display.getDisplay(this); }
public void startApp() { form.addCommand(back); form.setCommandListener(this); dp.addCommand(start); dp.addCommand(browse); dp.setCommandListener(this); display.setCurrent(dp); }
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
public void commandAction(Command com, Displayable arg1) { if (com == start) { try { InputStream is = getClass().getResourceAsStream( "/videos/phantom.mpg"); player = Manager.createPlayer(is, "video/mpeg"); player.realize(); vc = (VideoControl) player.getControl("VideoControl"); if (vc != null) { vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, dp); vc.setDisplayLocation(board, board); vc.setDisplaySize(dp.getWidth() - board * 2, dp.getHeight() - board * 2); vc.setVisible(true); } player.start();
// 显示摄像头的视频信息 // Player player = Manager.createPlayer("capture://video"); // player.realize(); // VideoControl vc = (VideoControl) // player.getControl("VideoControl"); // if (vc != null) { // vc.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, dp); // vc.setDisplayLocation(board, board); // vc.setDisplaySize(dp.getWidth() - board * 2, dp.getHeight() // - board * 2); // vc.setVisible(true); // } } catch (Exception e) { System.out.println(e.getMessage()); } } else if (com == browse) { try { player.stop(); form.deleteAll(); RecordStore rs = RecordStore.openRecordStore("Images", true); RecordEnumeration re = rs.enumerateRecords(null, null, false); while (re.hasNextElement()) { byte[] imageByte = re.nextRecord(); Image image = Image.createImage(imageByte, 0, imageByte.length); form.append(image); } display.setCurrent(form); } catch (Exception e) { System.out.println(e.getMessage()); } } else if (com == back) { display.setCurrent(dp); try { player.start(); } catch (Exception e) { System.out.println(e.getMessage()); } } }
public void capture() { String supports = System.getProperty("supports.video.capture"); if (supports == null) { Alert alert = new Alert("警告"); alert.setTimeout(1000); alert.setString("不支持视频捕获!"); display.setCurrent(alert); return; } Thread thread = new Thread(new NewThread()); thread.start(); }
class NewThread implements Runnable { public void run() { try { byte[] imageByte = vc.getSnapshot("encoding=jpeg"); storeImage(imageByte); } catch (Exception e) { System.out.println(e.getMessage()); } } }
public void storeImage(byte[] imageByte) { try { RecordStore rs = RecordStore.openRecordStore("Images", true); rs.addRecord(imageByte, 0, imageByte.length); } catch (Exception e) { System.out.println(e.getMessage()); } } }
class DrawPanel extends Canvas { Exec exec;
public DrawPanel(Exec exec) { this.exec = exec; }
public void paint(Graphics g) { g.setColor(0, 0, 255); g.fillRect(0, 0, getWidth(), getHeight()); }
protected void keyPressed(int keyCode) { int action = getGameAction(keyCode); if (action == FIRE) exec.capture(); } }
[此贴子已经被作者于2010-12-12 18:46:15编辑过]
|