Question

J'utilise le code pour modifier la taille et enregistrez le fichier à l'appareil BlackBerry. Après échelle de l'image que je tente d'écrire dans le fichier d'image dans l'appareil. Mais il donne les mêmes données. (Hauteur et largeur de l'image sont les mêmes) .Je doivent faire l'image rééchelonné file.Can quelqu'un me aider ???

étend la classe ResizeImage MainScreen outils FieldChangeListener {     chemin private String = "file: ///SDCard/BlackBerry/pictures/test.jpg";     BTN ButtonField privé;     ResizeImage ()     {         BTN = new ButtonField ( "Write File");         btn.setChangeListener (ce);         ajouter (BTN);       }       public void fieldChanged (champ Champ, contexte int)       {             if (champ == BTN)             {                 essayer                 {
                    InputStream fluxEntrée = null;                     // Get File Connection                     FileConnection FileConnection = (FileConnection) Connector.open (path);                     if (fileConnection.exists ())                     {                         fluxEntrée = fileConnection.openInputStream ();                         // octets de données [] = inputStream.toString () de 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");
        }
    }

}

Était-ce utile?

La solution

Consultez getScaledHeight () et getScaledWidth () dans EncodedImage.

Il est un truc de RIM sale.

Si vous épluchez le bitmap avec GetBitmap () qui aura getHeight valide () et getWidth ().

Ensuite, si vous voulez enregistrer cette image à l'échelle en format JPEG, vous devez réencoder.

par exemple.

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.

AFAIK, pré-5,0 au moins, il n'y a pas de mise à l'échelle native en jpeg w / o conversion en mode point.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top