2017-02-23 3 views
0

グリーティング! あなたたちがやっていることを願ってGreat !!!ImageLoaderでURL​​をロードした後、元のビットマップサイズを取得する方法| Android

私はUniversal Image Loaderで作業しています。私はURLから元のビットマップを取得する必要があります。

imageLoaderNew.loadImage(bean.getPostMedia().get(i).getUrl(), optionsPostImg, 
     new SimpleImageLoadingListener() { 
     @Override 
     public void onLoadingComplete(String imageUri, 
             View view, 
            Bitmap loadedImage) { 
    // Do whatever you want with Bitmap 
                 } 
             }); 

身長とloadedImageの幅は、元のビットマップの高さと幅と同じではありませんある -

は、ここに私のコードです。

私の元の画像の高さの幅は2208,1108ですが、イメージローダーはオリジナルのビットマップを与えていません。ここで

イメージローダの構成である -

optionsPostImg = new DisplayImageOptions.Builder() 
        .showImageOnLoading(R.drawable.post_img_default) // 
        .showImageForEmptyUri(R.drawable.post_img_default) 
        .showImageOnFail(R.drawable.post_img_default) 

        .cacheInMemory(true) 
        .cacheOnDisk(true) 
        .considerExifParams(true) 
        .imageScaleType(ImageScaleType.EXACTLY) 

        .build(); 

元のビットマップを取得する方法を、私に知らせてください。

+0

を以下のように使用することができます。まず、元のビットマップはありません。元のファイルのみ。 – greenapps

+0

しかし、私がファイルをダウンロードすると、メモリが大量に消費されます。 –

+0

いいえ、何もありません。おそらく、ループ内のバッファの8192バイト。それで全部です。 – greenapps

答えて

0

大きすぎてメモリ不足の問題が発生する場合は元のイメージをダウンロードしないでください。ただし、指定したURLから元のファイルをダウンロードすることはできます。

public Bitmap getBitmapFromURL(String src) { 
    try { 
     java.net.URL url = new java.net.URL(src); 
     HttpURLConnection connection = (HttpURLConnection) url 
       .openConnection(); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream input = connection.getInputStream(); 
     Bitmap myBitmap = BitmapFactory.decodeStream(input); 
     return myBitmap; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

そして、あなたはメモリの問題を取得する場合、あなたは、ファイルをダウンロードするだけで

public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 
    int width = bm.getWidth(); 
    int height = bm.getHeight(); 
    float scaleWidth = ((float) newWidth)/width; 
    float scaleHeight = ((float) newHeight)/height; 
    // CREATE A MATRIX FOR THE MANIPULATION 
    Matrix matrix = new Matrix(); 
    // RESIZE THE BIT MAP 
    matrix.postScale(scaleWidth, scaleHeight); 

    // "RECREATE" THE NEW BITMAP 
    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, 
      matrix, false); 

    return resizedBitmap; 
} 
+0

いいえ両方のコードが間違っています。ファイルをダウンロードするには、ファイルを変更してメモリの問題を引き起こすため、中間のビットマップは使用しません。 – greenapps

関連する問題