android get Bitmap or sound from assets
android get Bitmap or sound from assets
I need to get Bitmap and sound from assets. I try to do like this:
BitmapFactory.decodeFile("file:///android_asset/Files/Numbers/l1.png");
And like this:
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;
}
But I get just free space, not image.
How to do this?
4 Answers
4
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;
}
the path is simply your file name fx bitmap.png. if you use subfolder bitmap/ then its bitmap/bitmap.png
Check your picture... try to use debug and step through. Give more details, for where you picture is placed and what it is called.
– Warpzit
Dec 14 '11 at 21:09
Remember case sensitivity if you use subfolders
– Warpzit
Dec 14 '11 at 21:10
Nice code but I'd prefer to log an exception along with returning null with
Log.e("MYAPP", "exception", e);
just before return null;
– georgiecasey
Jan 12 '14 at 20:24
Log.e("MYAPP", "exception", e);
return null;
@georgiecasey hehe true, perhaps it should've been: // fill out whatever way you prefer.
– Warpzit
Jan 12 '14 at 20:29
Use this code its working
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();
}
Update
While decoding Bitmap we more often meet with memory overflow exception if Image size is very big. So reading article How to display Image efficiently will help you.
The accepted answer never closes the InputStream
. Here is a utility method for getting a Bitmap
in the assets folder:
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;
}
This should be the accepted answer ! You don't want not to close a stream because the kind of exception you might get later would be a native exception, meaning you will not be able to catch it :(
– Amit Farkash
Dec 13 '16 at 15:42
Method to get bitmap of image which is stored in Assets folder.
public static Bitmap getBitmapFromAssets(Context context, String fileName, int width, int height) {
AssetManager assetManager = context.getAssets();
InputStream istr;
Bitmap bitmap = null;
try {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
istr = assetManager.open(fileName);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, width, height);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeStream(istr, null, options);
} catch (IOException e) {
Log.e("hello", "Exception: " + e.getMessage());
}
return null;
}
Method to resize the bitmap.
private static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) >= reqHeight
&& (halfWidth / inSampleSize) >= reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.
It's right way. But I see only free space not the picture.. what I did wrong?
– Val
Dec 14 '11 at 18:55