package com.nutiteq.wrappers.rimui;
import java.io.IOException;
import java.io.InputStream;
import com.nutiteq.utils.IOUtils;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.EncodedImage;
/**
* Wrapper around Bitmap class to have similar interface to J2ME Image class.
*/
public class Image {
private final Bitmap image;
private final Graphics graphics;
private Image(final Bitmap bitmap) {
image = bitmap;
graphics = new Graphics(new net.rim.device.api.ui.Graphics(image));
}
public static Image createImage(final String image) throws IOException {
return createImage(image.getClass().getResourceAsStream(image));
}
public static Image createImage(final byte[] imageData, final int offset, final int length) {
final EncodedImage encoded = EncodedImage.createEncodedImage(imageData, offset, length);
return new Image(encoded.getBitmap());
}
public static Image createImage(final int imageWidth, final int imageHeight) {
return new Image(new Bitmap(imageWidth, imageHeight));
}
public static Image createImage(final InputStream is) throws IOException {
final byte[] data = IOUtils.readFully(is);
return createImage(data, 0, data.length);
}
public static Image createImage(final Image source, final int x, final int y, final int width,
final int height, final int transform) {
final Bitmap subimage = new Bitmap(width, height);
subimage.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
int [] data = new int[width * height];
for(int i=0; i<data.length;i++){
data[i] = 0x00000000;
}
subimage.setARGB(data, 0, width, 0, 0, width, height);
final net.rim.device.api.ui.Graphics graphics = new net.rim.device.api.ui.Graphics(subimage);
graphics.drawBitmap(0, 0, width, height, source.getNativeImage(), x, y);
return new Image(subimage);
}
public static Image createRGBImage(final int[] imageData, final int width, final int height, final boolean processAlpha){
Bitmap bitmap = new Bitmap(width,height);
bitmap.setARGB(imageData,0,width,0,0,width,height);
if(processAlpha){
bitmap.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
}
Image newImage = new Image(bitmap);
/*
final Bitmap tmp = new Bitmap(width,height);
if(processAlpha){
tmp.createAlpha(Bitmap.ALPHA_BITDEPTH_8BPP);
}
tmp.setARGB(imageData, 0, width, 0, 0, width, height);
return new Image(tmp);
*/
return newImage;
}
public int getWidth() {
return image.getWidth();
}
public int getHeight() {
return image.getHeight();
}
public Graphics getGraphics() {
return graphics;
}
public void getRGB(final int[] rgbData, final int offset, final int scanlength, final int x,
final int y, final int width, final int height) {
image.getARGB(rgbData, offset, scanlength, x, y, width, height);
}
public Bitmap getNativeImage() {
return image;
}
}