我试图使用ImageView显示图片文件, 虽然我知道我可以直接将文件解码为位图, 但我必须做一些其他事情,所以我只能选择byte []。
代码如下所示:
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字节, 会不会造成任何麻烦?
答案 0 :(得分: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());