2010-05-19 6 views
0

J'utilise le code suivant pour redimensionner et enregistrer le fichier dans l'appareil BlackBerry. Après l'échelle de l'image, j'essaie d'écrire le fichier image dans l'appareil. Mais il donne les mêmes données. (La hauteur et la largeur de l'image sont les mêmes). Je dois faire un fichier d'image remis à neuf.Peut-on m'aider?Redimensionner l'image et écrire un fichier image remis à l'échelle dans blackberry

ResizeImage classe étend MainScreen implémente FieldChangeListener { chemin private String = "file: ///SDCard/BlackBerry/pictures/test.jpg"; private ButtonField btn; ResizeImage() { btn = nouveau ButtonField ("Écrire le fichier"); btn.setChangeListener (this); ajouter (btn); } public void fieldChanged (champ Champ, contexte int) { if (champ == BTN) {{ essayer
InputStream fluxEntrée = null; // Obtenir la connexion de fichier FileConnection fileConnection = (FileConnection) Connector.open (chemin); if (fileConnection.exists()) { inputStream = fileConnection.openInputStream(); // octet de données [] = 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"); 
     } 
    } 

}

Répondre

0

Check out getScaledHeight() et getScaledWidth() dans EncodedImage.

C'est un truc RIM sale.

Si vous décollez l'image bitmap avec getBitmap() qui aura getHeight() et getWidth() valides. Ensuite, si vous souhaitez enregistrer cette image mise à l'échelle en tant que 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. 

autant que je sache, pré-5,0 au moins il n'y a pas de mise à l'échelle native en jpeg w/o convertir en bitmap.

Questions connexes