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

1

Я пытался отобразить файл изображения с помощью 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 length является нормальным, но данные внутри только получают: [B @40c4b110, что не похоже на данные изображения.

Спасибо в Advance, Desolve.

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

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

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

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

Теги:
bytearray

1 ответ

1

вы только считываете данные в первые 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());
  • 0
    Спасибо, но есть проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню