Image et écriture rescale fichier image redimensionnée dans BlackBerry
-
30-09-2019 - |
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");
}
}
}
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.