This is a Midlet build in J2ME.
It is compatible with NOKIA Phone, specially with the NOKIA3110.
Following are the files under the Sun's Wireless Toolkit JDK.
CaptureVideo.java:-
ImageCanvas.java:-
VideoCanvas:-
VideoSnap.java:-
Just compile this program & use it.
For more information visit Dwij IT Solutions.
It is compatible with NOKIA Phone, specially with the NOKIA3110.
Following are the files under the Sun's Wireless Toolkit JDK.
src |_CaptureVideo.java |_ImageCanvas.java |_VideoCanvas.java |_VideoSnap.java
CaptureVideo.java:-
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.*;
import javax.microedition.media.MediaException;
import javax.microedition.media.control.VideoControl;
public class CaptureVideo extends Thread {
public VideoSnap midlet;
public VideoControl videoControl;
public VideoCanvas canvas;
public CaptureVideo(VideoCanvas canvas, VideoSnap midlet, VideoControl vc) {
this.canvas = canvas;
this.midlet = midlet;
this.videoControl = vc;
}
public void run() {
try {
byte[] raw = videoControl.getSnapshot("encoding=jpeg");
Image image = Image.createImage(raw, 0, raw.length);
if(canvas.imageNumber == 5)
return;
canvas.images[canvas.imageNumber] = raw; //Adding Image byte Array to Image Array
Image resizedImage = createThumbnail(image); //Resize image to thumbnail
canvas.thumbImages[canvas.imageNumber] = resizedImage; // Add thumbnail image to image Array
canvas.imageNumber++;
canvas.repaint();
} catch (Exception e) {
Alert mediaExceptionAlert = new Alert("Media Exception","Cannot Capture Image: "+e.toString(),null,AlertType.INFO);
mediaExceptionAlert.setTimeout(3000);
midlet.display.setCurrent(mediaExceptionAlert);
}
}
private Image createThumbnail(Image image) {
int sourceWidth = image.getWidth();
int sourceHeight = image.getHeight();
int thumbWidth = 35;
int thumbHeight = -1;
if (thumbHeight == -1)
thumbHeight = thumbWidth * sourceHeight / sourceWidth;
Image thumb = Image.createImage(thumbWidth, thumbHeight);
Graphics g = thumb.getGraphics();
for (int y = 0; y < thumbHeight; y++) {
for (int x = 0; x < thumbWidth; x++) {
g.setClip(x, y, 1, 1);
int dx = x * sourceWidth / thumbWidth;
int dy = y * sourceHeight / thumbHeight;
g.drawImage(image, x - dx, y - dy, Graphics.LEFT | Graphics.TOP);
}
}
Image immutableThumb = Image.createImage(thumb);
return immutableThumb;
}
}
ImageCanvas.java:-
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.*;
import javax.microedition.media.MediaException;
import javax.microedition.media.control.VideoControl;
public class ImageCanvas extends Canvas {
public VideoSnap midlet;
public VideoCanvas canvas;
public byte[] img;
public ImageCanvas(VideoSnap midlet, VideoCanvas canvas, byte[] img) {
this.midlet = midlet;
this.canvas = canvas;
this.img = img;
setFullScreenMode(true);
}
public void paint(Graphics g) {
Image image = Image.createImage(img, 0, img.length);
g.drawImage(image, 0, 0, 0);
g.setColor(128,128,128);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL));
g.drawString("Save",54,151,0);
g.drawString("Back",112,151,0);
}
protected void keyPressed(int paramInt) {
if(paramInt == -7) {
midlet.display.setCurrent(canvas);
} else if(paramInt == -5) {
saveImage();
}
}
void saveImage() {
try {
FileConnection fc = null;
for(int i=0; i < 100; i++) {
fc = (FileConnection) Connector.open("file:///E:/image_"+i+".jpg");
if(fc.exists())
continue;
else
break;
}
fc.create();
OutputStream out = fc.openOutputStream();
out.write(img);
out.flush();
out.close();
Alert alert = new Alert("Image","Image Saved...",null,AlertType.INFO);
alert.setTimeout(3000);
midlet.display.setCurrent(alert);
} catch(Exception e) {
Alert alert = new Alert("Exception"," Image not Saved..."+e.toString(),null,AlertType.INFO);
alert.setTimeout(3000);
midlet.display.setCurrent(alert);
}
}
}
VideoCanvas:-
import javax.microedition.lcdui.*;
import javax.microedition.media.MediaException;
import javax.microedition.media.control.VideoControl;
public class VideoCanvas extends Canvas {
public VideoSnap midlet;
public VideoControl videoControl;
public int imageNumber = 0;
public byte[][] images = new byte[5][];
public Image[] thumbImages = new Image[5];
public int[] imageLocations = {72, 10, 72, 57, 1, 104, 37, 104, 73, 104};
public VideoCanvas(VideoSnap midlet, VideoControl vc) {
this.midlet = midlet;
this.videoControl = vc;
int width = getWidth();
int height = getHeight();
setFullScreenMode(true);
videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);
try {
videoControl.setDisplayLocation(1, 10);
videoControl.setDisplaySize(70, 93);
videoControl.setDisplayFullScreen(false);
} catch (MediaException me) {}
videoControl.setVisible(true);
}
void drawImageOnCanvas(Graphics g) {
for(int i=0; i if(thumbImages[i] != null)
g.drawImage(thumbImages[i], imageLocations[2*i], imageLocations[2*i+1], 0);
}
public void paint(Graphics g) {
int width = getWidth();
int height = getHeight();
g.setColor(128,128,128);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL));
g.drawString("Shri Ganesha",33,1,0);
g.setColor(0, 0, 0);
g.drawString("Capture",50,151,0);
g.drawString("Exit",112,151,0);
if(thumbImages.length > 0)
drawImageOnCanvas(g);
}
protected void keyPressed(int paramInt) {
if(paramInt == -7) {
midlet.destroyApp(true);
midlet.notifyDestroyed();
} else if(paramInt == -5) {
CaptureVideo cv = new CaptureVideo(this, midlet, videoControl);
cv.start();
} else if(paramInt == 49 && images[0] != null) {
ImageCanvas imgCanvas = new ImageCanvas(midlet, this, images[0]);
midlet.display.setCurrent(imgCanvas);
} else if(paramInt == 50 && images[1] != null) {
ImageCanvas imgCanvas = new ImageCanvas(midlet, this, images[1]);
midlet.display.setCurrent(imgCanvas);
} else if(paramInt == 51 && images[2] != null) {
ImageCanvas imgCanvas = new ImageCanvas(midlet, this, images[2]);
midlet.display.setCurrent(imgCanvas);
} else if(paramInt == 52 && images[3] != null) {
ImageCanvas imgCanvas = new ImageCanvas(midlet, this, images[3]);
midlet.display.setCurrent(imgCanvas);
} else if(paramInt == 53 && images[4] != null) {
ImageCanvas imgCanvas = new ImageCanvas(midlet, this, images[4]);
midlet.display.setCurrent(imgCanvas);
}
}
}
VideoSnap.java:-
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 VideoSnap extends MIDlet {
public Display display;
private Player player;
private VideoControl videoControl;
public void startApp() {
display = Display.getDisplay(this);
try {
//player = Manager.createPlayer("capture://video");
player = Manager.createPlayer("capture://image");
player.realize();
player.prefetch();
videoControl = (VideoControl)player.getControl("VideoControl");
Canvas canvas = new VideoCanvas(this, videoControl);
display.setCurrent(canvas);
player.start();
} catch (IOException ioe) {} catch (MediaException me) {}
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {
player.close();
}
}
Just compile this program & use it.
For more information visit Dwij IT Solutions.
No comments:
Post a Comment
Your comments will be important to impprove this blog.
Please have some comments or doubts freely.