使用字节数组读取文件,然后在ImageView(Android)上显示
我试图用ImageView显示一个图片文件, 虽然我知道我可以直接把文件解码成位图, 但是我必须对它做一些其他的事情,所以我只能选择byte[] 代码如下所示:使用字节数组读取文件,然后在ImageView(Android)上显示,android,bytearray,Android,Bytearray,我试图用ImageView显示一个图片文件, 虽然我知道我可以直接把文件解码成位图, 但是我必须对它做一些其他的事情,所以我只能选择byte[] 代码如下所示: File file = new File(getRealPathFromURI(Uri.parse(ImgUri))); byte[] beforeData = new byte[(int) file.length()]; try { FileInputStream fis = new FileInputStream(file)
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();}
我试着测试我是否正确阅读了图片,
所以我解码成位图,然后试着显示它,
但它根本不显示任何图片
我对FileInputStream有什么误解吗?
另外,我使用log.I检查发现beforeData的长度正常,
但里面的数据只能得到:
[B@40c4b110 ,
这与图片的数据不同
提前感谢,,
德索夫
哦,谢谢你,硅凝胶,
我忘了考虑那部分……(一开始我就这么做了)
然而,似乎这不是主要问题所在。。。
现在循环看起来像:
while (pos < beforeData.length){
read = fis.read(beforeData, pos, 1);
pos += read;
}
while(pos
我知道这很愚蠢很愚蠢,
但是这个块中的代码应该可以正常工作,对吗?
但是,我仍然无法在ImageView中看到任何图片
另请注意:
文件路径为/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());
每个循环只将数据读入数组的前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());
谢谢,但还是有问题。谢谢,但还是有问题。