Cambiar la escala de la imagen y escritura reescalado archivo de imagen en mora
-
30-09-2019 - |
Pregunta
Estoy utilizando el código siguiente para cambiar el tamaño y guardar el archivo en el dispositivo BlackBerry. Después de escala de la imagen Trato de escribir archivo de imagen en el dispositivo. Pero da los mismos datos. (Altura y anchura de la imagen son los mismos) .I tienen que hacer reescalada imagen file.Can alguien ayudarme ???
ResizeImage clase extiende MainScreen implementos FieldChangeListener
{
camino privado String = "file: ///SDCard/BlackBerry/pictures/test.jpg";
BTN ButtonField privado;
Cambiar el tamaño de la imagen()
{
BTN = new ButtonField ( "escritura de archivo");
btn.setChangeListener (this);
añadir (BTN);
}
(Campo de Campo, el contexto int) public void fieldChanged
{
si (campo == BTN)
{
tratar
{
InputStream flujoEntrada = null;
// obtener conexión de archivos
FileConnection FileConnection = (FileConnection) Connector.open (ruta de acceso);
if (fileConnection.exists ())
{
flujoEntrada = fileConnection.openInputStream ();
// datos byte [] = inputStream.toString () getBytes ();.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int j = 0;
while((j=inputStream.read()) != -1) {
baos.write(j);
}
byte data[] = baos.toByteArray();
inputStream.close();
fileConnection.close();
WriteFile("file:///SDCard/BlackBerry/pictures/org_Image.jpg",data);
EncodedImage eImage = EncodedImage.createEncodedImage(data,0,data.length);
int scaleFactorX = Fixed32.div(Fixed32.toFP(eImage.getWidth()), Fixed32.toFP(80));
int scaleFactorY = Fixed32.div(Fixed32.toFP(eImage.getHeight()), Fixed32.toFP(80));
eImage=eImage.scaleImage32(scaleFactorX, scaleFactorY);
WriteFile("file:///SDCard/BlackBerry/pictures/resize.jpg",eImage.getData());
BitmapField bit=new BitmapField(eImage.getBitmap());
add(bit);
}
}
catch(Exception e)
{
System.out.println("Exception is ==> "+e.getMessage());
}
}
}
void WriteFile(String fileName,byte[] data)
{
FileConnection fconn = null;
try
{
fconn = (FileConnection) Connector.open(fileName,Connector.READ_WRITE);
}
catch (IOException e)
{
System.out.print("Error opening file");
}
if (fconn.exists())
try
{
fconn.delete();
}
catch (IOException e)
{
System.out.print("Error deleting file");
}
try
{
fconn.create();
}
catch (IOException e)
{
System.out.print("Error creating file");
}
OutputStream out = null;
try
{
out = fconn.openOutputStream();
}
catch (IOException e) {
System.out.print("Error opening output stream");
}
try
{
out.write(data);
}
catch (IOException e) {
System.out.print("Error writing to output stream");
}
try
{
fconn.close();
}
catch (IOException e) {
System.out.print("Error closing file");
}
}
}
Solución
Salida getScaledHeight () y getScaledWidth () en EncodedImage.
Es un truco sucio RIM.
Si se pela el mapa de bits con getBitmap () que tendrá getHeight válida () y getWidth ().
A continuación, si desea guardar esa imagen como un archivo JPEG a escala que necesita para volver a codificar.
por ejemplo.
Bitmap scaledBMP = scaledEI.getBitmap();
JPEGEncodedImage finalJPEG = JPEGEncodedImage.encode(scaledBMP, 80); // int arg is quality
raw_media_bytes = finalJPEG.getData();
raw_length = finalJPEG.getLength();
raw_offset = finalJPEG.getOffset();
// don't forget to use the length and offset info, because getData() is
// not guaranteed to work by itself.
Que yo sepa, pre-5.0, al menos, no hay nativa de escala en jpeg-w / o la conversión de mapa de bits.