2011-12-14 53 views
30

我需要從資產中獲取位圖和聲音。我試着這樣做:android獲取資產的位圖或聲音

BitmapFactory.decodeFile("file:///android_asset/Files/Numbers/l1.png"); 

而且這樣的:

getBitmapFromAsset("Files/Numbers/l1.png"); 
    private Bitmap getBitmapFromAsset(String strName) { 
     AssetManager assetManager = getAssets(); 
     InputStream istr = null; 
     try { 
      istr = assetManager.open(strName); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     Bitmap bitmap = BitmapFactory.decodeStream(istr); 
     return bitmap; 
    } 

但我得到的只是自由空間,而不是圖像。

如何做到這一點?

回答

98
public static Bitmap getBitmapFromAsset(Context context, String filePath) { 
    AssetManager assetManager = context.getAssets(); 

    InputStream istr; 
    Bitmap bitmap = null; 
    try { 
     istr = assetManager.open(filePath); 
     bitmap = BitmapFactory.decodeStream(istr); 
    } catch (IOException e) { 
     // handle exception 
    } 

    return bitmap; 
} 

該路徑只是您的文件名fx bitmap.png。如果你使用的子文件夾的位圖/那麼它的位圖/ bitmap.png

+0

這是正確的做法。但我只看到空閒空間而不是圖片..我做錯了什麼? – Val 2011-12-14 18:55:32

+0

檢查你的圖片...嘗試使用調試和步驟。提供更多細節,放置照片的位置以及它的名稱。 – Warpzit 2011-12-14 21:09:02

10

使用此代碼的工作

try { 
    InputStream bitmap=getAssets().open("icon.png"); 
    Bitmap bit=BitmapFactory.decodeStream(bitmap); 
    img.setImageBitmap(bit); 
} catch (IOException e1) { 
    // TODO Auto-generated catch block 
    e1.printStackTrace(); 
} 

更新

雖然解碼位圖,我們更多的時候內存溢出異常滿足,如果圖像尺寸非常大。所以閱讀文章How to display Image efficiently將幫助你。

6

接受的答案永遠不會關閉InputStream。以下是在資產文件夾中獲取Bitmap的實用方法:

/** 
* Retrieve a bitmap from assets. 
* 
* @param mgr 
*   The {@link AssetManager} obtained via {@link Context#getAssets()} 
* @param path 
*   The path to the asset. 
* @return The {@link Bitmap} or {@code null} if we failed to decode the file. 
*/ 
public static Bitmap getBitmapFromAsset(AssetManager mgr, String path) { 
    InputStream is = null; 
    Bitmap bitmap = null; 
    try { 
     is = mgr.open(path); 
     bitmap = BitmapFactory.decodeStream(is); 
    } catch (final IOException e) { 
     bitmap = null; 
    } finally { 
     if (is != null) { 
      try { 
       is.close(); 
      } catch (IOException ignored) { 
      } 
     } 
    } 
    return bitmap; 
}