package org.unicef.devtrac.utilities;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import net.rim.device.api.math.Fixed32;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.system.JPEGEncodedImage;
public class ImageUtility {
public static final String ERROR_PREFIX = "Error: ";
public static String resizeImage(String path, int requiredWidth,
int requiredHeight) {
EncodedImage encodedImage = getBitmapImageForPath(path);
encodedImage = getResizedEncodedImage(encodedImage, requiredWidth, requiredHeight);
Bitmap resizedBitmap = encodedImage.getBitmap();
byte[] resized = JPEGEncodedImage.encode(resizedBitmap, 75).getData();
FileConnection fcImg = null;
String imageExtension = "";
String imagePathWintoutExtension = path;
if (path.lastIndexOf('.') != -1) {
imageExtension = path.substring(path.lastIndexOf('.'));
imagePathWintoutExtension = path
.substring(0, path.lastIndexOf('.'));
}
String resizedPath = imagePathWintoutExtension + "_" + requiredWidth
+ "x" + requiredHeight + imageExtension;
try {
fcImg = (FileConnection) Connector.open(resizedPath,
Connector.READ_WRITE);
if (fcImg.exists()) {
fcImg.delete();
}
fcImg.create();
OutputStream out = fcImg.openOutputStream();
out.write(resized);
out.flush();
out.close();
} catch (Exception e) {
return ERROR_PREFIX + e.getMessage();
} finally {
try {
if (fcImg != null) {
fcImg.close();
}
} catch (Exception e) {
}
}
return resizedPath;
}
private static EncodedImage getResizedEncodedImage(
EncodedImage encodedImage, int width, int height) {
int currentWidthFixed32 = Fixed32.toFP(encodedImage.getWidth());
int currentHeightFixed32 = Fixed32.toFP(encodedImage.getHeight());
int requiredWidthFixed32 = Fixed32.toFP(width);
int requiredHeightFixed32 = Fixed32.toFP(height);
int scaleXFixed32 = Fixed32.div(currentWidthFixed32,
requiredWidthFixed32);
int scaleYFixed32 = Fixed32.div(currentHeightFixed32,
requiredHeightFixed32);
encodedImage = encodedImage.scaleImage32(scaleXFixed32, scaleYFixed32);
return encodedImage;
}
public static EncodedImage getBitmapImageForPath(String imagePath) {
FileConnection fconn = null;
try {
fconn = (FileConnection) Connector.open(imagePath, Connector.READ);
if (fconn.exists()) {
byte[] imageBytes = new byte[(int) fconn.fileSize()];
InputStream inStream = fconn.openInputStream();
inStream.read(imageBytes);
inStream.close();
EncodedImage eimg = EncodedImage.createEncodedImage(imageBytes,
0, (int) fconn.fileSize());
return eimg;
}
} catch (Exception e) {
} finally {
try {
if (fconn != null) {
fconn.close();
}
} catch (Exception e) {
return null;
}
}
return null;
}
}