Android Drawable изображения из URL
В настоящее время я, используя следующий фрагмент кода для загрузки изображений как объектов выигрышного форма 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, он бросает!--2--> когда я даю ему URL. В 2.2, учитывая тот же URL, он работает нормально. Следующий URL-адрес является образцом ввода, который я даю этой функции.
http://bks6.books.google.com/books?id=aH7BPTrwNXUC&printsec=frontcover&img=1&zoom=5&edge=curl&sig=ACfU3U2aQRnAX2o2ny2xFC1GmVn22almpg
как бы я загрузил изображения таким образом, чтобы они были совместимы по всем направлениям из URL?
5 ответов
растровое изображение-это не холст. Если вам действительно нужен 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(x);
}
(я использовал подсказку, найденную вhttps://stackoverflow.com/a/2416360/450148)
решил сам. Я загрузил его как растровое изображение, используя следующий код.
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 запрещает доступ, если он отсутствует
Я не уверен, но я думаю, что Drawable.createFromStream () больше предназначен для использования с локальными файлами, а не загруженными InputStreams. Попробуйте использовать BitmapFactory.decodeStream()
, затем обертывание возвращаемого растрового изображения в BitmapDrawable.
для меня работает следующий код:
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);
вы можете использовать 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.