2011-07-11 7 views
1

ファイルを直接デコードすることができるとわかっていましたが、ImageView、 を使って画像ファイルを表示しようとしましたが、それ以外のものは、バイト[]だけを選ぶことができました。バイト配列を使用してファイルを読み込んだ後、ImageView(Android)に表示

コードは次のようになります。

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で私が誤解していることはありますか? PS。私はlog.iを使用してチェックし、前のデータの長さが普通であることがわかりました。 しかし、内部のデータは取得: [B @ 40c4b110、 写真のデータのようではありません。

ありがとうございました。 Desolve。 (私は非常に開始時に)私はその部分を考慮するのを忘れ

おっと、あなたはsiliconeagleおかげで、 ... 主な問題がどこにあるかそうでないようにしかし、それは ...思わ今ループのように見えます:

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

右、それは愚かだと私はこのブロック内のコードが正しく動作するはずです 、知っているダミー? しかし、ImageViewでまだ画像が表示されませんでした。

別のPS: ファイルのパスは、サイズが何らかのトラブルを引き起こす、/mnt/sdcard/DCIM/Camera/1310368442822.jpgで サイズ1485847バイト、 のですか?

答えて

1

各ループの最初の1024バイトにデータを読み込むだけです。 )(

fis.read(beforeData, 0, 1024); 

あなたは位置カウンタ(int型POS)を維持しなければならないと検出する-1

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

を、あなたのファイル(fis.closeを閉じることを確認します(int型の読み取り)別の変数を使用します

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

おかげで、しかし、問題はまだあります。)だけでなく...

最良の方法です。 – Desolve

関連する問題