Monday, February 25, 2008

Reading an image from Gallery in Java ME

How to read an image from Gallery in Java ME

This article shows, how to read an image from Gallery by using FileConnection API (JSR-75) and show it on Form. The Gallery folders can be accessed by using system properties, or example: System.getProperty("fileconn.dir.photos"). File contents are read by using InputStream, data is saved to a byte array and Image object is created by using Image.createImage() method.

The full source code for a test MIDlet:

ReadImage.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.file.*;
import javax.microedition.io.*;
import java.io.*;

public class ReadImage extends MIDlet implements CommandListener
{
private Form form;
private
String photos = "fileconn.dir.photos";
private
Image image;
private Command exitCommand;

public
void startApp() {
form = new Form
("ReadMIDlet");
exitCommand = new Command
("Exit", Command.EXIT, 1);
form.
addCommand(exitCommand);
form.
setCommandListener(this);
Display.
getDisplay(this).setCurrent(form);
String path = System.getProperty(photos);
form.
append(readFile(path + "image.png"));
}

public
void pauseApp() {
}

public
void destroyApp(boolean unconditional) {
}

public
Image readFile(String path) {
try
{
FileConnection fc =
(FileConnection)Connector.open(path, Connector.READ);
if(!fc.exists()) {
System.out.println("File doesn't exist!");
}
else {
int size = (int)fc.fileSize();
InputStream is = fc.openInputStream();
byte bytes[] = new byte[size];
int length = is.read(bytes, 0, size);
image =
Image.createImage(bytes, 0, size);
}

} catch (IOException ioe) {
System.out.println("IOException: "+ioe.getMessage());
} catch (IllegalArgumentException iae) {
System.out.println("IllegalArgumentException: "+iae.getMessage());
}
return image;
}

public
void commandAction(Command c, Displayable d) {
if (c == exitCommand) this.notifyDestroyed();
}
}

No comments: