2010-03-22 50 views
2

我已经使用所有标准网络相关代码获取图像约45KB to 75KB,但所有这些方法都失败,这些方法适用于大小为3-5KB大小的图像。我怎样才能实现下载的45 - 75KB图像对Android中为我的网络运营的ImageView的显示他们我已经使用过的东西是Android Image Getter for Larger Images

final URL url = new URL(urlString); 

final URLConnection conn = url.openConnection(); 
HttpURLConnection httpConn = (HttpURLConnection) conn; 

httpConn.setAllowUserInteraction(true); 

httpConn.setInstanceFollowRedirects(true); 

httpConn.setRequestMethod("GET"); 

httpConn.connect(); 

而且,我已经用了第二个选项是::

DefaultHttpClient httpClient = new DefaultHttpClient(); 

HttpGet getRequest = new HttpGet(urlString); 

HttpResponse response = httpClient.execute(getRequest); 

为什么此代码可用于较小尺寸的图像,而不适用于较大尺寸的图像。 ?

回答

2

很高兴看到用于将响应解码为位图的代码类型。无论如何,尝试使用这样的BufferedInputStream:

public Bitmap getRemoteImage(final URL aURL) { 
    try { 
    final URLConnection conn = aURL.openConnection(); 
    conn.connect(); 
    final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); 
    final Bitmap bm = BitmapFactory.decodeStream(bis); 
    return bm; 
    } catch (IOException e) { 
    Log.d("DEBUGTAG", "Oh noooz an error..."); 
    } 
    return null; 
} 
+0

雅PHP_Jedi的BufferedInputStream是真的是我想的,这是真的东西会解决问题,帮助人是感谢。 – 2010-03-28 07:58:30

7

您下载的图像的大小是非常不相关的。但是,使用BitmapFactory.decodeStream解码的大小是您需要处理图像的内存。 因此重新采样可能是有用的。

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

    BitmapFactory.decodeStream(is, null, options); 

    Boolean scaleByHeight = Math.abs(options.outHeight - TARGET_HEIGHT) >= Math.abs(options.outWidth - TARGET_WIDTH); 

    if(options.outHeight * options.outWidth >= 200*200){ 
    // Load, scaling to smallest power of 2 if dimensions >= desired dimensions 
    double sampleSize = scaleByHeight 
      ? options.outHeight/TARGET_HEIGHT 
      : options.outWidth/TARGET_WIDTH; 
    options.inSampleSize = 
      (int)Math.pow(2d, Math.floor(
      Math.log(sampleSize)/Math.log(2d))); 
    } 

    // Do the actual decoding 
    options.inJustDecodeBounds = false; 

    is.close(); 
    is = getHTTPConnectionInputStream(sUrl); 
    Bitmap img = BitmapFactory.decodeStream(is, null, options); 
    is.close(); 
+0

Robert Foss我在这里谈论的大小不是图像有限大小,而是服务器上图像的大小,问题是在下载40K图像时,下载变得不成功并且毫无结果。低于相同的代码就可以满足这个问题。那是我的问题是什么。 – 2010-03-28 08:02:26

+0

谢谢..这非常有帮助! – 2010-05-17 01:23:38

+0

嗨罗伯特! “200 * 200 * 2”是什么意思? – 2010-06-19 17:02:01