Если у вас есть данные RGBA из изображения, вы должны закодировать их перед сохранением, поэтому найдите подходящий кодер для ваших целей. Вы можете использовать формат png для всех программ j2me. Во-первых, вы хотели бы получить данные RGBA из изображения:
/**
* Gets the channels of the image passed as parameter.
* @param img Image
* @return matrix of byte array representing the channels:
* [0] --> alpha channel
* [1] --> red channel
* [2] --> green channel
* [3] --> blue channel
*/
public byte[][] convertIntArrayToByteArrays(Image img) {
int[] pixels = new int[img.getWidth() * img.getHeight()];
img.getRGB(pixels, 0, img.getWidth(), 0, 0, img.getWidth(),
img.getHeight());
// separate channels
byte[] red = new byte[pixels.length];
byte[] green = new byte[pixels.length];
byte[] blue = new byte[pixels.length];
byte[] alpha = new byte[pixels.length];
for (int i = 0; i < pixels.length; i++) {
int argb = pixels[i];
//binary operations to separate the channels
//alpha is the left most byte of the int (0xAARRGGBB)
alpha[i] = (byte) (argb >> 24);
red[i] = (byte) (argb >> 16);
green[i] = (byte) (argb >> 8);
blue[i] = (byte) (argb);
}
return new byte[][]{alpha, red, green, blue};
}
Теперь загрузите класс PNG.java из здесь . В этом классе мы имеем:
toPNG(int,int,byte[],byte[],byte[],byte[])
Первые целые числа - это ширина и высота изображениямассивы байтов расположены по порядку: альфа, красный, зеленый и ... синий. Ширина и высота довольно просты: + getWidth (): int и + getHeight (): int из объекта Image (как вы это сделали) идругие зарабатываются ** convertIntArrayToByteArrays **:
byte[][] rgba = convertIntArrayToByteArrays(galleryImage);
byte[] encodeImage = toPNG(galleryImage.getWidth(),galleryImage.getHeight(),rgba[0] ,rgba[1] ,rgba[2],rgba[3]);
Теперь вы можете сохранить encodeImage в файле с помощью fileconnection.
Если вам нравится сохранять изображение в формате jpeg, скачайте com.encoder.jpg из здесь , затем:
import com.encoder.jpg.*;
//your input image
Image image = Image.createImage(128, 128);
JPGEncoder encoder = new JPGEncoder();
int quality = 65;
byte[] encodedImage = encoder.encode(image, quality);
//now save or send encoded jpeg image
Наконец, вы можете использовать MediaProcessor из jsr234:
//Create MediaProcessor for raw Image
MediaProcessor mediaProc = GlobalManager.createMediaProcessor("image/raw");
//Get control over the format
ImageFormatControl formatControl = (ImageFormatControl)
mediaProc.getControl("javax.microedition.amms.control.ImageFormatControl");
//Set necessary format
formatControl.setFormat("image/jpeg");
Ссылки:
stackoverflow
Java-н-я