Я пытался отобразить файл изображения с помощью 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 байт, будет ли размер причиной каких-либо проблем?
вы только считываете данные в первые 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());