31

現在、次のコードを使用して、描画可能なオブジェクトがURLを形成するときに画像を読み込みます。

Drawable drawable_from_url(String url, String src_name) 
throws java.net.MalformedURLException, java.io.IOException {
        return Drawable.createFromStream(((java.io.InputStream)new java.net.URL(url).getContent()), src_name);

}

このコードは希望どおりに機能しますが、互換性の問題があるようです。バージョン1.5ではFileNotFoundException、URLを指定するとがスローされます。2.2では、まったく同じURLを指定すると、正常に機能します。次のURLは、私がこの関数に与えている入力例です。

http://bks6.books.google.com/books?id=aH7BPTrwNXUC&printsec=frontcover&img=1&zoom=5&edge=curl&sig=ACfU3U2aQRnAX2o2ny2xFC1GmVn22almpg

URLから全面的に互換性のある方法で画像を読み込むにはどうすればよいですか?

4

6 に答える 6

50

Bitmap は Drawable ではありません。Drawable が本当に必要な場合は、次のようにします。

public static Drawable drawableFromUrl(String url) throws IOException {
    Bitmap x;

    HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
    connection.connect();
    InputStream input = connection.getInputStream();

    x = BitmapFactory.decodeStream(input);
    return new BitmapDrawable(Resources.getSystem(), x);
}

( https://stackoverflow.com/a/2416360/450148にあるヒントを使用しました)

于 2012-02-28T21:31:34.923 に答える
15

自分で解決しました。次のコードを使用して、ビットマップとしてロードしました。

Bitmap drawable_from_url(String url) throws java.net.MalformedURLException, java.io.IOException {

    HttpURLConnection connection = (HttpURLConnection)new URL(url) .openConnection();
    connection.setRequestProperty("User-agent","Mozilla/4.0");

    connection.connect();
    InputStream input = connection.getInputStream();

    return BitmapFactory.decodeStream(input);
}

ユーザー エージェントを追加することも重要でした。これがない場合、googlebooks はアクセスを拒否するためです。

于 2010-08-03T14:44:31.937 に答える
5

よくわかりませんが、Drawable.createFromStream() は、ダウンロードされた InputStreams ではなく、ローカル ファイルでの使用を意図していると思います。を使用してから、返された Bitmap をBitmapDrawableBitmapFactory.decodeStream()にラップしてみてください。

于 2010-07-30T20:47:44.037 に答える
1

次のコードは私のために働きます:

Matrix Mat = new Matrix();

Bitmap Source = BitmapFactory.decodeFile("ItemImagePath");

Bitmap Destination = Bitmap.createScaledBitmap( Source, 320, 320, true );

Source = Bitmap.createBitmap( Destination, 0, 0, Destination.getWidth(), Destination.getHeight(),Mat, true );

ItemImageView.setImageBitmap(Source);
于 2012-10-30T10:04:13.533 に答える
0

com.androidquery.AndroidQuery を使用して、これを非常に簡単に行うことができます。例えば:

AQuery aq = new AQuery(this);
aq.id(view).image("http://yourserver/yourimage.png", true, true, 300, new BitmapAjaxCallback() {
        @Override
        public void callback(String url, ImageView imageView, Bitmap bitmap, AjaxStatus status) {
            Drawable drawable = new BitmapDrawable(getResources(), bm);
        }
    });

BitmapAjaxCallback を使用すると、BitmapDrawable としてラップできる BitMap にアクセスできます。

于 2013-07-15T14:21:20.380 に答える