web-dev-qa-db-fra.com

Charger une image à partir du dossier des actifs

J'essaie de charger une image à partir du dossier asset, puis de la définir sur ImageView. Je sais que c'est beaucoup mieux si j'utilise le R.id.* pour cela, mais le principe est que je ne connais pas l'id de l'image. En gros, j'essaie de charger dynamiquement l'image via son nom de fichier. 

Par exemple, je récupère au hasard un élément de la database représentant une 'vache', ce que mon application ferait maintenant: afficher une image d'une 'vache' via la ImageView. Ceci est également vrai pour tous les éléments de la database. (L'hypothèse est, pour chaque élément, il y a une image équivalente)

merci d'avance.

MODIFIER

oublié la question, comment puis-je charger l'image à partir du dossier asset?

51
kishidp

Si vous connaissez le nom du fichier dans le code, appeler ce ne sera pas un problème:

ImageView iw= (ImageView)findViewById(R.id.imageView1);  
int resID = getResources().getIdentifier(drawableName, "drawable",  getPackageName());
iw.setImageResource(resID);

Votre nom de fichier sera le même nom que drawableName afin que vous n'ayez pas à traiter avec des actifs.

30
Erol

Commander ce code . Dans ce tutoriel, vous trouverez comment charger une image à partir d'un dossier de ressources.

// charger l'image

try 
{
    // get input stream
    InputStream ims = getAssets().open("avatar.jpg");
    // load image as Drawable
    Drawable d = Drawable.createFromStream(ims, null);
    // set image to ImageView
    mImage.setImageDrawable(d);
  ims .close();
}
catch(IOException ex) 
{
    return;
}
104
Chirag

Vous voilà,

  public Bitmap getBitmapFromAssets(String fileName) {
    AssetManager assetManager = getAssets();

    InputStream istr = assetManager.open(fileName);
    Bitmap bitmap = BitmapFactory.decodeStream(istr);

    return bitmap;
}
38
osayilgan

Certaines de ces réponses peuvent répondre à la question mais je n’ai jamais aimé aucune d’elles et j’ai fini par écrire ceci, c’est pour aider la communauté.

Obtenez Bitmap de l'actif:

public Bitmap loadBitmapFromAssets(Context context, String path)
{
    InputStream stream = null;
    try
    {
        stream = context.getAssets().open(path);
        return BitmapFactory.decodeStream(stream);
    }
    catch (Exception ignored) {} finally
    {
        try
        {
            if(stream != null)
            {
                stream.close();
            }
        } catch (Exception ignored) {}
    }
    return null;
}

Obtenez Drawable de l'actif:

public Drawable loadDrawableFromAssets(Context context, String path)
{
    InputStream stream = null;
    try
    {
        stream = context.getAssets().open(path);
        return Drawable.createFromStream(stream, null);
    }
    catch (Exception ignored) {} finally
    {
        try
        {
            if(stream != null)
            {
                stream.close();
            }
        } catch (Exception ignored) {}
    }
    return null;
}
6
Nicolas Tyler
WebView web = (WebView) findViewById(R.id.webView);
web.loadUrl("file:///Android_asset/pract_recommend_section1_pic2.png");
web.getSettings().setBuiltInZoomControls(true);
2
Evgeny

Cela a fonctionné dans mon cas d'utilisation:

AssetManager assetManager = getAssets();
ImageView imageView = (ImageView) findViewById(R.id.imageView);
try (
        //declaration of inputStream in try-with-resources statement will automatically close inputStream
        // ==> no explicit inputStream.close() in additional block finally {...} necessary
        InputStream inputStream = assetManager.open("products/product001.jpg")
) {
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
    imageView.setImageBitmap(bitmap);
} catch (IOException ex) {
    //ignored
}

(voir aussi https://javarevisited.blogspot.com/2014/10/right-way-to-close-inputstream-file-resource-in-Java.html )

1
Yves
public static Bitmap getImageFromAssetsFile(Context mContext, String fileName) {
        Bitmap image = null;
        AssetManager am = mContext.getResources().getAssets();
        try {
            InputStream is = am.open(fileName);
            image = BitmapFactory.decodeStream(is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return image;
    }
1
Anil Singhania