web-dev-qa-db-fra.com

Créer un bitmap/dessinable à partir d'un chemin de fichier

J'essaie de créer un bitmap ou un dessin à partir d'un chemin de fichier existant.

String path = intent.getStringExtra("FilePath");
BitmapFactory.Options option = new BitmapFactory.Options();
option.inPreferredConfig = Bitmap.Config.ARGB_8888;

mImg.setImageBitmap(BitmapFactory.decodeFile(path));
// mImg.setImageBitmap(BitmapFactory.decodeFile(path, option));
// mImg.setImageDrawable(Drawable.createFromPath(path));
mImg.setVisibility(View.VISIBLE);
mText.setText(path);

Mais setImageBitmap(), setImageDrawable() ne montre aucune image du chemin. J'ai imprimé le chemin avec mText et cela ressemble à: /storage/sdcard0/DCIM/100LGDSC/CAM00001.jpg

Qu'est-ce que je fais mal? Est-ce que quelqu'un peut m'aider?

63
Nari Kim Shin

Créer un bitmap à partir du chemin du fichier:

File sd = Environment.getExternalStorageDirectory();
File image = new File(sd+filePath, imageName);
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true);
imageView.setImageBitmap(bitmap);

Si vous souhaitez redimensionner le bitmap à la hauteur et à la largeur du parent, utilisez la fonction Bitmap.createScaledBitmap.

Je pense que vous donnez le mauvais chemin de fichier. :) J'espère que cela t'aides.

116
CodeShadow

Ça marche pour moi:

File imgFile = new  File("/sdcard/Images/test_image.jpg");
if(imgFile.exists()){
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    //Drawable d = new BitmapDrawable(getResources(), myBitmap);
    ImageView myImage = (ImageView) findViewById(R.id.imageviewTest);
    myImage.setImageBitmap(myBitmap);

}

Modifier:

Si le répertoire sdcard ci-dessus codé en dur ne fonctionne pas dans votre cas, vous pouvez récupérer le chemin de la carte

String sdcardPath = Environment.getExternalStorageDirectory().toString();
File imgFile = new  File(sdcardPath);
50
Kaidul

voici une solution:

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
29
techtinkerer

Bien, utiliser la Drawable.createFromPath(String pathName) statique me semble un peu plus simple que de le décoder vous-même ... :-)

Si votre mImg est une simple ImageView, vous n'en avez même pas besoin, utilisez directement mImg.setImageUri(Uri uri).

3
Gábor
static ArrayList< Drawable>  d;
d = new ArrayList<Drawable>();
for(int i=0;i<MainActivity.FilePathStrings1.size();i++) {
  myDrawable =  Drawable.createFromPath(MainActivity.FilePathStrings1.get(i));
  d.add(myDrawable);
}
1
sanjay patel

vous ne pouvez pas accéder à vos dessinables via un chemin, donc si vous voulez une interface lisible par l'homme avec vos dessinables que vous pouvez construire par programme.

déclarez un HashMap quelque part dans votre classe:

private static HashMap<String, Integer> images = null;

//Then initialize it in your constructor:

public myClass() {
  if (images == null) {
    images = new HashMap<String, Integer>();
    images.put("Human1Arm", R.drawable.human_one_arm);
    // for all your images - don't worry, this is really fast and will only happen once
  }
}

Maintenant pour l'accès -

String drawable = "wrench";
// fill in this value however you want, but in the end you want Human1Arm etc
// access is fast and easy:
Bitmap wrench = BitmapFactory.decodeResource(getResources(), images.get(drawable));
canvas.drawColor(Color .BLACK);
Log.d("OLOLOLO",Integer.toString(wrench.getHeight()));
canvas.drawBitmap(wrench, left, top, null);
0
Suresh Parmar