Android получить Bitmap или звук из активов

Мне нужно получить битмап и звук из активов. Я пытаюсь сделать так:

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

Но я получаю только свободное пространство, а не изображение.

Как это сделать?

Ответ 1

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

Ответ 2

Используйте этот код для работы

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

Обновить

При декодировании Bitmap мы чаще встречаемся с исключением переполнения памяти, если размер изображения очень большой. Поэтому чтение статьи Как эффективно отображать изображение поможет вам.

Ответ 3

Принятый ответ никогда не закрывает 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;
}