2012-02-02 3 views
0

J'essaie d'afficher des images de stockage interne Android, j'ai seulement 4images (les images sont des captures d'écran prises auparavant), je montre ces images dans un GridView, cela fonctionne, mais il prend trop de temps, voici mon code:Lire les images byte byte de android le stockage interne prend trop de temps

FileInputStream fis = null; 
DataOutputStream outWriter = null; 
ByteArrayOutputStream bufStream = null; 
String imageFile; 
int occurence; 
for (int i=0; i<4; i++) { 
    try { 
     occurence = i+1; 
     imageFile = "preview"+occurence+".png"; 
     fis = openFileInput(imageFile); 
     bufStream = new ByteArrayOutputStream(); 
     outWriter = new DataOutputStream(bufStream); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    int ch; 
    byte[] data = null; 
    try { 
     **while((ch = fis.read()) != -1) 
      outWriter.write(ch);** 
     outWriter.close(); 
     data = bufStream.toByteArray(); 
     bufStream.close(); 
     fis.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    favorPreviews.add(BitmapFactory.decodeByteArray(data, 0, data.length)) ; 
} 

Comme vous pouvez le voir, je suis en utilisant FileInputStream de les lire, mais qui lit les fichiers octet par octet dans cette boucle:

while((ch = fis.read()) != -1) 
    outWriter.write(ch); 

Et cela prend trop de temps, quelqu'un sait-il un moyen plus rapide de lire ces images?

Répondre

1

Etre plus rapide est indiqué pour réduire la taille de l'image. Il peut être fait en utilisant la Bitmap decodeFile (String pathName, BitmapFactory.Options opts)

Regardez cet exemple:

public Bitmap getReducedBitmap(String path) { 
    BitmapFactory.Options opt = new BitmapFactory.Options(); 
    opt.inSampleSize=4; // reduced the image to 1/4 of the orignal size 
    return BitmapFactory.decodeFile(path, opt); 
} 
+0

merci beaucoup, je vais essayer –