0

サーバーから画像をダウンロードするためにこのコードを使用しています:

public Bitmap getBitmap(String path){
    URL url=new URL(path);
    URLConnection connection=url.openConnection();
    connection.setDoInput(true);
    connection.connect();
    InputStream is=connection.getInputStream();
    Bitmap bmp=BitmapFactory.decodeStream(is);
    return bmp;
}

1つの画像では問題なく動作しますが、これをサイクルで使用している場合、2回目、3回目などの反復で奇妙なものを返します(ビットマップmWidthmHeightフィールドは です-1)。どこに問題がありますか?

path2回目、3回目などの繰り返しは問題ありません。これを確認しました)

編集

サイクルの例:

//images - is a String array
for(int i=0; i<images.length(); i++){
    Bitmap bmp=getBitmap(images[i]);
}

Ss ご覧のとおり、このサイクルには異常はありません

4

1 に答える 1

1

Bitmap.recycle1 つのビットマップを読み終えた後、次のビットマップをロードする前に呼び出してみてください。

問題は、ビットマップ自体のサイズを変更できないことです。

おそらく、ビットマップの配列を作成する方がよいでしょう - これまでのパスのために1つ。

残念ながら、最適化のために Java マシン (またはコンパイラ) は以前のビットマップを破棄せず、再利用しようとします。結果についてここに書いてください。それは面白いです。

画像を読み取っていないサイズを読み取ろうとします。

    BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;

Bitmap btemp = BitmapFactory.decodeFile(selectedImagePath,options);

この後、以下のコードを使用して高さと幅を取得します。

     options.outHeight     for height
      options.outWidth    for width

何が見えますか?

パスの順序を変更してみてください。最初のパスだけで問題ありませんか? そうでない場合、問題はファイルにあります。はいの場合、接続/ストリーム/工場で。

于 2012-01-26T21:04:08.143 に答える