Чтение изображений побайтово из внутренней памяти Android занимает слишком много времени - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь отобразить изображения из внутренней памяти Android, у меня только 4 изображения (изображения сняты ранее), я отображаю эти изображения в GridView, он работает, но это занимает слишком много времени, это мой код:

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

Как видите, я использую FileInputStream для их чтения, но это читает файлы побайтно в этом цикле:

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

И это занимает слишком много времени, кто-нибудь знает более быстрый способ чтения этих изображений?

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Быстрее указывается для уменьшения размера изображения.Это можно сделать с помощью Bitmap decodeFile (String pathName, BitmapFactory.Options opts)

Посмотрите этот пример:

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 голосов
/ 03 февраля 2012

Используйте взамен BitmapFactory.decodeFile(String).Тогда все это чтение файла обрабатывается для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...