Ich muss Bitmap und Sound von Assets bekommen. Ich versuche es so zu machen:
BitmapFactory.decodeFile("file:///Android_asset/Files/Numbers/l1.png");
Und so:
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;
}
Aber ich bekomme nur freien Platz, kein Bild.
Wie macht man das?
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;
}
der Pfad ist einfach Ihr Dateiname fx bitmap.png. Wenn Sie den Unterordner Bitmap/dann seine Bitmap/Bitmap.png verwenden
Verwenden Sie diesen Code, um zu funktionieren
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
Bei der Decodierung von Bitmap treffen wir häufiger mit einer Ausnahme für den Speicherüberlauf, wenn Image size sehr groß ist. Lesen Sie also den Artikel So zeigen Sie das Bild effizient an wird Ihnen helfen.
Die akzeptierte Antwort schließt niemals die InputStream
. Hier ist eine Hilfsmethode, um eine Bitmap
im Assets-Ordner abzurufen:
/**
* 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;
}
Methode zum Abrufen der Bitmap des Bildes, das im Ordner Assets gespeichert ist.
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;
}
Methode zur Größenänderung der 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;
}