byte[] data = VideoControl.getSnapshot("encoding=jpeg");返回一个jpeg格式的二进制数据,把这些数据写入文件保存后即为图片。
encoding=png时为png格式。
view plaincopy to clipboardprint?
package lab.sodino.snapshot;
import java.io.IOException;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
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.Image;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.control.VideoControl;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import com.sun.perseus.model.ImageNode;
public class SnapshotTest extends MIDlet implements CommandListener {
private Display mDisplay;
private Player mPlayer;
private VideoControl mVideoControl;
private Form f;
private Command exitCom, cameraCom, backCom, snapshotCom, saveCom;
private TextField tf;
byte[] raw;
TextField imageName;
public SnapshotTest() {
exitCom = new Command("Exit", Command.EXIT, 0);
cameraCom = new Command("Camera", Command.SCREEN, 0);
backCom = new Command("Back", Command.BACK, 0);
snapshotCom = new Command("Capture", Command.SCREEN, 0);
saveCom = new Command("Save", Command.SCREEN, 0);
f = new Form("snapshot");
f.addCommand(exitCom);
String supports = System.getProperty("video.snapshot.encodings");
if (supports != null && supports.length() > 0) {
f.append("ready to snapshot...");
f.addCommand(cameraCom);
} else {
f.append("sorry,not supported!");
}
f.setCommandListener(this);
}
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
mDisplay = Display.getDisplay(this);
mDisplay.setCurrent(f);
}
public void commandAction(Command c, Displayable d) {
if (c.getCommandType() == Command.EXIT) {
try {
destroyApp(true);
} catch (MIDletStateChangeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
notifyDestroyed();
} else if (c == cameraCom) {
showCamera();
} else if (c == backCom) {
mDisplay.setCurrent(f);
} else if (c == snapshotCom) {
capture();
} else if (c == saveCom) {
save();
}
}
private void showCamera() {
try {
mPlayer = Manager.createPlayer("capture://video");
mPlayer.realize();
mVideoControl = (VideoControl) mPlayer.getControl("VideoControl");
Canvas canvas = new CameraCanvas(this, mVideoControl);
canvas.addCommand(backCom);
canvas.addCommand(snapshotCom);
canvas.setCommandListener(this);
mDisplay.setCurrent(canvas);
mPlayer.start();
} catch (IOException ioe) {
} catch (MediaException me) {
}
}
public void capture() {
try {
// raw = mVideoControl.getSnapshot("encoding=jpeg");
// raw = mVideoControl.getSnapshot("encoding=png");
raw = mVideoControl.getSnapshot(null);
Image img = Image.createImage(raw, 0, raw.length);
if (f.size() > 0 && (f.get(0) instanceof StringItem == true)) {
f.delete(0);
}
imageName = new TextField("ImageName", null, 256, TextField.ANY);
f.append(imageName);
f.append(img);
f.removeCommand(cameraCom);
f.addCommand(saveCom);
mDisplay.setCurrent(f);
mPlayer.close();
mPlayer = null;
mVideoControl = null;
} catch (MediaException me) {
System.out.println(me);
}
}
public void save() {
String name = imageName.getString();
String initDir = System.getProperty("fileconn.dir.photos");
try {
System.out.println(initDir + name);
FileConnection fc = (FileConnection) Connector.open(initDir + name);
fc.create();
OutputStream fos = fc.openOutputStream();
fos.write(raw);
fos.close();
} catch (Exception e) {
}
Alert a = new Alert("Save Resuit:", "save success....", null, null);
a.setTimeout(2000);
mDisplay.setCurrent(a, f);
}
}
package lab.sodino.snapshot;
import java.io.IOException;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
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.Image;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.control.VideoControl;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import com.sun.perseus.model.ImageNode;
public class SnapshotTest extends MIDlet implements CommandListener {
private Display mDisplay;
private Player mPlayer;
private VideoControl mVideoControl;
private Form f;
private Command exitCom, cameraCom, backCom, snapshotCom, saveCom;
private TextField tf;
byte[] raw;
TextField imageName;
public SnapshotTest() {
exitCom = new Command("Exit", Command.EXIT, 0);
cameraCom = new Command("Camera", Command.SCREEN, 0);
backCom = new Command("Back", Command.BACK, 0);
snapshotCom = new Command("Capture", Command.SCREEN, 0);
saveCom = new Command("Save", Command.SCREEN, 0);
f = new Form("snapshot");
f.addCommand(exitCom);
String supports = System.getProperty("video.snapshot.encodings");
if (supports != null && supports.length() > 0) {
f.append("ready to snapshot...");
f.addCommand(cameraCom);
} else {
f.append("sorry,not supported!");
}
f.setCommandListener(this);
}
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
mDisplay = Display.getDisplay(this);
mDisplay.setCurrent(f);
}
public void commandAction(Command c, Displayable d) {
if (c.getCommandType() == Command.EXIT) {
try {
destroyApp(true);
} catch (MIDletStateChangeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
notifyDestroyed();
} else if (c == cameraCom) {
showCamera();
} else if (c == backCom) {
mDisplay.setCurrent(f);
} else if (c == snapshotCom) {
capture();
} else if (c == saveCom) {
save();
}
}
private void showCamera() {
try {
mPlayer = Manager.createPlayer("capture://video");
mPlayer.realize();
mVideoControl = (VideoControl) mPlayer.getControl("VideoControl");
Canvas canvas = new CameraCanvas(this, mVideoControl);
canvas.addCommand(backCom);
canvas.addCommand(snapshotCom);
canvas.setCommandListener(this);
mDisplay.setCurrent(canvas);
mPlayer.start();
} catch (IOException ioe) {
} catch (MediaException me) {
}
}
public void capture() {
try {
// raw = mVideoControl.getSnapshot("encoding=jpeg");
// raw = mVideoControl.getSnapshot("encoding=png");
raw = mVideoControl.getSnapshot(null);
Image img = Image.createImage(raw, 0, raw.length);
if (f.size() > 0 && (f.get(0) instanceof StringItem == true)) {
f.delete(0);
}
imageName = new TextField("ImageName", null, 256, TextField.ANY);
f.append(imageName);
f.append(img);
f.removeCommand(cameraCom);
f.addCommand(saveCom);
mDisplay.setCurrent(f);
mPlayer.close();
mPlayer = null;
mVideoControl = null;
} catch (MediaException me) {
System.out.println(me);
}
}
public void save() {
String name = imageName.getString();
String initDir = System.getProperty("fileconn.dir.photos");
try {
System.out.println(initDir + name);
FileConnection fc = (FileConnection) Connector.open(initDir + name);
fc.create();
OutputStream fos = fc.openOutputStream();
fos.write(raw);
fos.close();
} catch (Exception e) {
}
Alert a = new Alert("Save Resuit:", "save success....", null, null);
a.setTimeout(2000);
mDisplay.setCurrent(a, f);
}
} view plaincopy to clipboardprint?
package lab.sodino.snapshot;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.media.MediaException;
import javax.microedition.media.control.VideoControl;
public class CameraCanvas extends Canvas {
private SnapshotTest mMidlet;
int width = getWidth();
int height = getHeight();
public CameraCanvas(SnapshotTest midlet, VideoControl videoCon) {
mMidlet = midlet;
videoCon.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);
videoCon.setDisplayLocation(2, 2);
try {
videoCon.setDisplaySize(width - 4, height - 4);
} catch (MediaException e) {
try {
videoCon.setDisplayFullScreen(true);
} catch (MediaException me) {
System.out.println(me);
}
}
videoCon.setVisible(true);
}
protected void paint(Graphics g) {
g.setColor(0x0000ff);
g.drawRect(0, 0, width - 1, height - 1);
g.drawRect(1, 1, width - 3, height - 3);
}
public void keyPressed(int keyCode) {
int action = getGameAction(keyCode);
if (action == FIRE) {
mMidlet.capture();
}
}
}
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/sodino/archive/2010/03/13/5377437.aspx
http://www.guaiguaier.com