Namespaces
Variants
Actions

How to display the camera & take snapshots in Java ME

Jump to: navigation, search

This Java ME Camera MIDletcode example shows how to display the camera and take snapshots.

Article Metadata

Article
Created: wang_shui (20 Mar 2007)
Last edited: hamishwillee (12 Jan 2012)

Source code

import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.media.control.VideoControl;
 
public class CameraMIDlet extends MIDlet implements CommandListener {
 
private Display display;
private Form form;
private Command exit,back,capture,camera;
private Player player;
private VideoControl videoControl;
private Video video;
 
public CameraMIDlet() {
 
exit = new Command("Exit", Command.EXIT, 0);
camera = new Command("Camera", Command.SCREEN, 0);
back = new Command("Back", Command.BACK, 0);
capture = new Command("Capture", Command.SCREEN, 0);
 
form = new Form("Capture Video");
form.addCommand(camera);
form.setCommandListener(this);
}
 
public void startApp() {
display = Display.getDisplay(this);
display.setCurrent(form);
}
 
public void pauseApp() {}
 
public void destroyApp(boolean unconditional) {}
 
public void commandAction(Command c, Displayable s) {
if (c == exit) {
destroyApp(true);
notifyDestroyed();
} else if (c == camera) {
showCamera();
} else if (c == back)
display.setCurrent(form);
else if (c == capture) {
video = new Video(this);
video.start();
}
}
 
public void showCamera() {
try {
player = Manager.createPlayer("capture://video"); // "capture://video" is used for S60 devices
//player = Manager.createPlayer("capture://image"); // "capture://image" is used for Series 40 devices
player.realize();
 
videoControl = (VideoControl)player.getControl("VideoControl");
Canvas canvas = new VideoCanvas(this, videoControl);
canvas.addCommand(back);
canvas.addCommand(capture);
canvas.setCommandListener(this);
display.setCurrent(canvas);
player.start();
} catch (IOException ioe) {} catch (MediaException me) {}
}
 
class Video extends Thread {
CameraMIDlet midlet;
public Video(CameraMIDlet midlet) {
this.midlet = midlet;
}
 
public void run() {
captureVideo();
 
}
 
public void captureVideo() {
try {
byte[] raw = videoControl.getSnapshot(null);
Image image = Image.createImage(raw, 0, raw.length);
form.append(image);
display.setCurrent(form);
 
player.close();
player = null;
videoControl = null;
} catch (MediaException me) { }
}
};
}


The following code is used for displaying camera video using canvas:

import javax.microedition.lcdui.*;
import javax.microedition.media.MediaException;
import javax.microedition.media.control.VideoControl;
 
public class VideoCanvas extends Canvas {
private CameraMIDlet midlet;
 
public VideoCanvas(CameraMIDlet midlet, VideoControl videoControl) {
int width = getWidth();
int height = getHeight();
this.midlet = midlet;
 
videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);
try {
videoControl.setDisplayLocation(2, 2);
videoControl.setDisplaySize(width - 4, height - 4);
} catch (MediaException me) {}
videoControl.setVisible(true);
}
 
public void paint(Graphics g) {
int width = getWidth();
int height = getHeight();
 
g.setColor(0x00ff00);
g.drawRect(0, 0, width - 1, height - 1);
g.drawRect(1, 1, width - 3, height - 3);
}
}

Using this code

  1. Create a new project in Sun WTK or in NetBeans as CameraMIDlet.
  2. Copy the two files according to their class name.
  3. Build Project.
  4. Run Project.

TODO: list available modes, and when you need to use a different locator

Helpful links

http://developers.sun.com/mobility/midp/articles/picture/

http://www.java-tips.org/java-me-tips/midp/capturing-video-on-j2me-devices.html

Comments

Reviewer-approved.png
24 Sep
2009
Article Review by kalki (20090924)

This article discusses displaying camera using MIDlet and taking snapshot.The Code given in this article initially creates a public method cameraPlayer() for initializing videoControl class and then uses byte array to store images as raw data to store snapshot into memory.

I feel code and explanation is enough to do the said task.Code contains no errors. It is valuable resource for those making application that uses camera.

This page was last modified on 12 January 2012, at 00:31.
332 page views in the last 30 days.
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2012 All rights reserved