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?
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.
Ç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);
voici une solution:
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
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)
.
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);
}
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);