如何从网址中获取大图像?

时间:2011-01-01 04:27:50

标签: android

我使用下面的代码从网址中获取图片,但它不适用于大图片。

在获取该类型的图像时我是否遗漏了某些内容?

imgView = (ImageView)findViewById(R.id.ImageView01);
  imgView.setImageBitmap(loadBitmap("http://www.360technosoft.com/mx4.jpg"));

  //imgView.setImageBitmap(loadBitmap("http://sugardaddydiaries.com/wp-content/uploads/2010/12/how_do_i_get_sugar_daddy.jpg"));
     //setImageDrawable("http://sugardaddydiaries.com/wp-content/uploads/2010/12/holding-money-copy.jpg");
  //Drawable drawable = LoadImageFromWebOperations("http://www.androidpeople.com/wp-content/uploads/2010/03/android.png");
  //imgView.setImageDrawable(drawable);

 /* try {
     ImageView i = (ImageView)findViewById(R.id.ImageView01);
     Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://sugardaddydiaries.com/wp-content/uploads/2010/12/holding-money-copy.jpg").getContent());
     i.setImageBitmap(bitmap); 
   } catch (MalformedURLException e) {
     System.out.println("hello");
   } catch (IOException e) {
    System.out.println("hello");
   }*/
    }


 protected Drawable ImageOperations(Context context, String string,
   String string2) {
  // TODO Auto-generated method stub
  try {
   InputStream is = (InputStream) this.fetch(string);
   Drawable d = Drawable.createFromStream(is, "src");
   return d;
  } catch (MalformedURLException e) {
   e.printStackTrace();
   return null;
  } catch (IOException e) {
   e.printStackTrace();
   return null;
  }

 }

4 个答案:

答案 0 :(得分:5)

您正在尝试从UI线程中下载大图像....这将导致ANR(应用程序无响应)

使用AsyncTask下载图片,这样一来,单独的线程将用于下载,而你的UI线程将无法锁定。

答案 1 :(得分:3)

看到这个从服务器加载图像的好例子。  blog.sptechnolab.com/2011/03/04/android/android-load-image-from-url/

答案 2 :(得分:2)

如果您想非常快速地下载图片,那么您可以使用类似于 JQuery AQuery ,只需下载android-query.0.15.7.jar

导入jar文件并添加以下代码段

 AQuery aq = new AQuery(this);   
 aq.id(R.id.image).image("http://4.bp.blogspot.com/_Q95xppgGoeo/TJzGNaeO8zI/AAAAAAAAADE/kez1bBRmQTk/s1600/Sri-Ram.jpg");   

// Here R.id.image is id of your ImageView 
// This method will not give any exception 
// Dont forgot to add Internet Permission

答案 3 :(得分:0)

        public class MyImageActivity extends Activity 
    {
        private String image_URL= "http://home.austarnet.com.au/~caroline/Slideshows/Butterfly_Bitmap_Download/slbutfly.bmp"; 

        private ProgressDialog pd;
        private Bitmap bitmap;
        private ImageView bmImage;
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                bmImage  = (ImageView)findViewById(R.id.imageview);
                pd = ProgressDialog.show(this, "Please Wait", "Downloading Image");
                DownloadWebPageTask task = new DownloadWebPageTask();
                task.execute(new String[] { image_URL }); 
                 // You can also give more images in string array

        }
        private class DownloadWebPageTask extends AsyncTask<String, Void, Bitmap> 
        {
            // String -->  parameter in execute
            // Bitmap -->  return type of doInBackground and parameter of onPostExecute
            @Override
            protected Bitmap doInBackground(String...urls) {
                String response = "";
                for (String url : urls) 
                {
                    InputStream i = null;
                     BufferedInputStream bis = null;
                     ByteArrayOutputStream out =null;

//             Only for Drawable Image          
//             try
//             {
//                 URL url = new URL(image_URL);
//                 InputStream is = url.openStream();
//                 Drawable d = Drawable.createFromStream(is, "kk.jpg");
//                   bmImage.setImageDrawable(d); 
//             }
//          catch (Exception e) {
//              // TODO: handle exception
//          }

// THE ABOVE CODE IN COMMENTS WILL NOT WORK FOR BITMAP IMAGE                    

 try
                     {
                         URL  m = new URL(image_URL);
                         i = (InputStream) m.getContent();
                         bis = new BufferedInputStream(i, 1024*8);
                         out = new ByteArrayOutputStream();
                         int len=0;
                         byte[] buffer = new byte[4096];
                         while((len = bis.read(buffer)) != -1)
                         {
                             out.write(buffer, 0, len);
                         }
                         out.close();
                         bis.close();

                     byte[] data = out.toByteArray();
                     bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                     }
                     catch (Exception e) 
                     {
                        e.printStackTrace();
                     }
                     }

                return bitmap;
            }

            @Override
            protected void onPostExecute(Bitmap result) 
            {
                if(result!=null)
                bmImage.setImageBitmap(result);
                pd.dismiss();
            }
        }
    }