Estoy intentando crear un mapa de bits o dibujable a partir de la ruta del archivo existente.
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);
Sin embargo setImageBitmap()
, setImageDrawable()
no muestra una imagen de la ruta. He impreso la ruta con mText
y se ve así:/storage/sdcard0/DCIM/100LGDSC/CAM00001.jpg
¿Qué estoy haciendo mal? ¿Alguien puede ayudarme?
java
android
android-drawable
bitmapfactory
Nari Kim Shin
fuente
fuente
id
inmBuffer
. Sin embargo, sumHeight
,mWidth
valor es-1
, ymLayoutBounds
esnull
.Cursor
y probé otras imágenes, pero el mismo resultado. Además, verifiqué la ruta a travésadb shell
y descubrí que existen imágenes en esa ruta.Respuestas:
Crear mapa de bits a partir de la ruta del archivo:
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 desea escalar el mapa de bits a la altura y el ancho del padre, use la
Bitmap.createScaledBitmap
función.Creo que está dando la ruta de archivo incorrecta. :) Espero que esto ayude.
fuente
Esto funciona para mi:
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); }
Editar:
Si el directorio sdcard codificado anteriormente no funciona en su caso, puede buscar la ruta de la sdcard:
String sdcardPath = Environment.getExternalStorageDirectory().toString(); File imgFile = new File(sdcardPath);
fuente
Environment.getExternalStorageDirectory().toString()
y luego intenteaquí hay una solución:
fuente
Bueno, usar la estática me
Drawable.createFromPath(String pathName)
parece un poco más sencillo que decodificarla usted mismo ... :-)Si tu
mImg
es simpleImageView
, ni siquiera lo necesitas, úsalomImg.setImageUri(Uri uri)
directamente.fuente
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); }
fuente
no puede acceder a sus elementos de diseño a través de una ruta, por lo que si desea una interfaz legible por humanos con sus elementos de diseño que pueda construir mediante programación.
declare un HashMap en algún lugar de su clase:
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 } }
Ahora para acceder -
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);
fuente