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





It's right way. But I see only free space not the picture.. what I did wrong?
– Val
Dec 14 '11 at 18:55





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.

Comments

Popular posts from this blog

paramiko-expect timeout is happening after executing the command

Export result set on Dbeaver to CSV

Opening a url is failing in Swift