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