Использование байтового массива для чтения в файле, а затем отображения в ImageView (Android) - PullRequest
1 голос
/ 11 июля 2011

Я пытался отобразить файл изображения с помощью ImageView, хотя я знал, что могу напрямую декодировать файл в растровое изображение, но я должен был сделать с ним что-то другое, поэтому я мог выбрать только байт [].

Код выглядит следующим образом:

File file = new File(getRealPathFromURI(Uri.parse(ImgUri)));
byte[] beforeData = new byte[(int) file.length()];
try {
    FileInputStream fis = new FileInputStream(file);
    int detectEnd = 0;
    while (detectEnd != -1){detectEnd = fis.read(beforeData, 0, 1024);}
    Bitmap b_t = BitmapFactory.decodeByteArray(beforeData, 0, beforeData.length);
    editImgView.setImageBitmap(b_t);
} catch (FileNotFoundException e) {e.printStackTrace();}
    catch (IOException e) {e.printStackTrace();}

Я пытался проверить, правильно ли я прочитал изображение, поэтому я декодирую его в Bitmap, затем пытаюсь отобразить его, но оно не отображает изображение.вообще.

Есть ли что-то, что я неправильно понял с FileInputStream?PS.Я использую log.i, чтобы проверить и обнаружил, что длина beforeData нормальная, но данные внутри получаются только: [B @ 40c4b110, что не похоже на данные изображения.

Заранее спасибо, Desolve.

Ой, спасибо, Силикон, я забыл рассмотреть эту часть ... (В самом начале я это сделал) Однако, похоже, что не в этом главная проблема ... Теперь цикл выглядит так:

    while (pos < beforeData.length){
            read = fis.read(beforeData, pos, 1);
            pos += read;
        }

Это глупо и глупо, я знаю, но код в этом блоке должен работать правильно, верно?Тем не менее, я все еще не вижу изображения в моем ImageView.

Другой PS: путь к файлу по адресу /mnt/sdcard/DCIM/Camera/1310368442822.jpg, размер 1485847 байт, может привести к возникновению проблем.

1 Ответ

1 голос
/ 11 июля 2011

вы только читаете данные в первые 1024 байта массива каждого цикла.

fis.read(beforeData, 0, 1024);

Вы должны будете поддерживать счетчик положения (int pos) и использовать другую переменную (int read) для обнаружения -1

int read=0;
int pos=0;
while (read!=-1) {
    read= fis.read(beforeData, pos, 1024);
    pos+=read;
}

убедитесь, что вы также закрыли свои файлы (fis.close ()) ...

Лучший способ это:

File tmpImgFile = new File("/path");
BitmapFactory.decodeFile(tmpImgFile.getAbsolutePath());
...