📄 cameracanvas.java
字号:
// Copyright 2002 Nokia Corporation. // // THIS SOURCE CODE IS PROVIDED 'AS IS', WITH NO WARRANTIES WHATSOEVER, // EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS // FOR ANY PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE // OR TRADE PRACTICE, RELATING TO THE SOURCE CODE OR ANY WARRANTY OTHERWISE // ARISING OUT OF ANY PROPOSAL, SPECIFICATION, OR SAMPLE AND WITH NO // OBLIGATION OF NOKIA TO PROVIDE THE LICENSEE WITH ANY MAINTENANCE OR // SUPPORT. FURTHERMORE, NOKIA MAKES NO WARRANTY THAT EXERCISE OF THE // RIGHTS GRANTED HEREUNDER DOES NOT INFRINGE OR MAY NOT CAUSE INFRINGEMENT // OF ANY PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OWNED OR CONTROLLED // BY THIRD PARTIES // // Furthermore, information provided in this source code is preliminary, // and may be changed substantially prior to final release. Nokia Corporation // retains the right to make changes to this source code at // any time, without notice. This source code is provided for informational // purposes only. // // Nokia and Nokia Connecting People are registered trademarks of Nokia// Corporation.// Java and all Java-based marks are trademarks or registered trademarks of// Sun Microsystems, Inc.// Other product and company names mentioned herein may be trademarks or// trade names of their respective owners.// // A non-exclusive, non-transferable, worldwide, limited license is hereby // granted to the Licensee to download, print, reproduce and modify the // source code. The licensee has the right to market, sell, distribute and // make available the source code in original or modified form only when // incorporated into the programs developed by the Licensee. No other // license, express or implied, by estoppel or otherwise, to any other // intellectual property rights is granted herein.// unnamed packageimport javax.microedition.lcdui.*;import javax.microedition.media.*;import javax.microedition.media.control.*;import java.io.IOException;class CameraCanvas extends Canvas implements CommandListener{ private final CameraMIDlet midlet; private final Command exitCommand; private Command captureCommand = null; private Player player = null; private VideoControl videoControl = null; private boolean active = false; // Two strings for displaying error messages private String message1 = null; private String message2 = null; CameraCanvas(CameraMIDlet midlet) { this.midlet = midlet; exitCommand = new Command("Exit", Command.EXIT, 1); addCommand(exitCommand); setCommandListener(this); try { player = Manager.createPlayer("capture://video"); player.realize(); // Grab the video control and set it to the current display. videoControl = (VideoControl)(player.getControl("VideoControl")); if (videoControl == null) { discardPlayer(); message1 = "Unsupported:"; message2 = "Can't get video control"; } else { videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this); // centre video, letting it be clipped if it's too big int canvasWidth = getWidth(); int canvasHeight = getHeight(); int displayWidth = videoControl.getDisplayWidth(); int displayHeight = videoControl.getDisplayHeight(); int x = (canvasWidth - displayWidth) / 2; int y = (canvasHeight - displayHeight) / 2; videoControl.setDisplayLocation(x, y); captureCommand = new Command("Capture", Command.SCREEN, 1); addCommand(captureCommand); } } catch (IOException ioe) { discardPlayer(); message1 = "IOException:"; message2 = ioe.getMessage(); } catch (MediaException me) { discardPlayer(); message1 = "MediaException:"; message2 = me.getMessage(); } catch (SecurityException se) { discardPlayer(); message1 = "SecurityException"; message2 = se.getMessage(); } } // Called in case of exception to make sure invalid players are closed private void discardPlayer() { if (player != null) { player.close(); player = null; } videoControl = null; } public void paint(Graphics g) { g.setColor(0x00FFFF00); // yellow g.fillRect(0, 0, getWidth(), getHeight()); if (message1 != null) { g.setColor(0x00000000); // black g.drawString(message1, 1, 1, Graphics.TOP | Graphics.LEFT); g.drawString(message2, 1, 1 + g.getFont().getHeight(), Graphics.TOP | Graphics.LEFT); } } synchronized void start() { if ((player != null) && !active) { try { player.start(); videoControl.setVisible(true); } catch (MediaException me) { message1 = "Media exception:"; message2 = me.getMessage(); } catch (SecurityException se) { message1 = "SecurityException"; message2 = se.getMessage(); } active = true; } } synchronized void stop() { if ((player != null) && active) { try { videoControl.setVisible(false); player.stop(); } catch (MediaException me) { message1 = "MediaException:"; message2 = me.getMessage(); } active = false; } } public void commandAction(Command c, Displayable d) { if (c == exitCommand) { midlet.cameraCanvasExit(); } else if (c == captureCommand) { takeSnapshot(); } } public void keyPressed(int keyCode) { if (getGameAction(keyCode) == FIRE) { takeSnapshot(); } } private void takeSnapshot() { if (player != null) { try { byte[] pngImage = videoControl.getSnapshot(null); midlet.cameraCanvasCaptured(pngImage); } catch (MediaException me) { message1 = "MediaException:"; message2 = me.getMessage(); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -