Cambiar la escala de la imagen y escritura reescalado archivo de imagen en mora

StackOverflow https://stackoverflow.com/questions/2863277

  •  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");
        }
    }

}

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top