2011-12-14 35 views
30

Tôi cần nhận Bitmap và âm thanh từ nội dung. Tôi cố gắng làm như thế này:android nhận bitmap hoặc âm thanh từ nội dung

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

Và như thế này:

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; 
    } 

Nhưng tôi nhận được không gian chỉ miễn phí, không phải hình ảnh.

Cách thực hiện việc này?

Trả lời

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; 
} 

đường dẫn chỉ đơn giản là tên tệp của bạn fx bitmap.png. nếu bạn sử dụng thư mục con bitmap/sau đó bitmap của nó/bitmap.png

+0

Đúng cách. Nhưng tôi chỉ thấy không gian trống không phải hình ảnh .. những gì tôi đã làm sai? – Val

+0

Kiểm tra ảnh của bạn ... thử sử dụng gỡ lỗi và thực hiện từng bước. Cung cấp thêm chi tiết, cho nơi bạn đặt hình ảnh và những gì nó được gọi. – Warpzit

+0

Hãy nhớ trường hợp nhạy cảm nếu bạn sử dụng các thư mục con – Warpzit

10

Sử dụng mã này làm việc của nó

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(); 
} 

Cập nhật

Trong khi giải mã Bitmap chúng tôi thường xuyên hơn đáp ứng với bộ nhớ tràn ngoại lệ nếu kích thước hình ảnh là rất lớn. Vì vậy, đọc bài viết How to display Image efficiently sẽ giúp bạn.

6

Câu trả lời được chấp nhận không bao giờ đóng InputStream. Dưới đây là phương pháp tiện ích để nhận số Bitmap trong thư mục nội dung:

/** 
* 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; 
} 
+0

Đây phải là câu trả lời được chấp nhận! Bạn không muốn không đóng luồng vì loại ngoại lệ bạn có thể nhận được sau này sẽ là ngoại lệ gốc, nghĩa là bạn sẽ không thể bắt được luồng đó :( –

Các vấn đề liên quan