Android Image Getter для больших изображений - PullRequest
2 голосов
/ 22 марта 2010

Я использовал весь код, относящийся к стандартной сети, для получения изображений размером примерно 45KB to 75KB, но все они не работают, эти методы работают нормально для файлов размером примерно 3-5KB изображений. Как я могу добиться загрузки изображения 45 - 75KB для отображения их в ImageView в Android для моих сетевых операций, которые я использовал

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 ]

7 голосов
/ 28 марта 2010

Размер загружаемого вами изображения не имеет значения. Размер, который он декодирует с помощью 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();
2 голосов
/ 27 марта 2010

Было бы неплохо увидеть, какой код вы используете для декодирования ответа в растровое изображение.В любом случае, попробуйте использовать 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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...