2010-04-22 15 views
11

que tomar una foto con la cámara medianteCómo cargar un ImageView desde un archivo png?

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(intent, 22); 

Cuando se completa la actividad, escribo la imagen de mapa de bits en un archivo PNG.

java.io.FileOutputStream out = openFileOutput("myfile.png", Context.MODE_PRIVATE); 
    bmp.compress(Bitmap.CompressFormat.PNG, 90, out); 

Eso va bien, y puedo ver que el archivo se crea en el espacio de datos privados de mi aplicación.

Tengo dificultades cuando más tarde quiero mostrar esa imagen con un ImageView.

¿Alguien puede sugerir el código para hacer esto?

Si intento crear un archivo con separadores de ruta, falla. Si intento crear un Uri a partir de un nombre sin separadores, eso falla.

I puede abrir el archivo Aceptar usando:

 java.io.FileInputStream in = openFileInput("myfile.png"); 

Pero eso no me da el Uri necesito para configurar una imagen con

iv.setImageURI(u) 

Resumen: Tengo la imagen en un archivo png en datos de aplicaciones privadas. ¿Cuál es el código para configurar eso en un ImageView?

Gracias.

Respuesta

33

Pruebe BitmapFactory.decodeFile() y luego setImageBitmap() en el ImageView.

+1

Gracias, sí, eso lo hizo. Lo único que se debe observar es que bmp.Compress en un archivo, dando solo el nombre del archivo. Pero para decodificar ese mismo archivo, debe construir y proporcionar la ruta completa. Android tiene varias asimetrías irreflexivas como esta. String fname = c.getFilesDir(). GetAbsolutePath() + "/ myfile.png"; Bitmap bm = BitmapFactory.decodeFile (fname); iv.setImageBitmap (bm); –

+1

Para evitar errores OOM y "mapa de bits demasiado grande para ser cargado en una textura": http://developer.android.com/training/displaying-bitmaps/load-bitmap.html – Adam

+0

¡Funciona para mí! ¡Muchas gracias! @CommonsWare Por favor, ¿cree que podría ayudarme con esta pregunta? Http://goo.gl/wO9G2N – eddy

7

También es posible:

java.io.FileInputStream in = openFileInput("myfile.png"); 
iv.setImageBitmap(BitmapFactory.decodeStream(in)); 
+7

¿Por qué es incluso mejor que BitmapFactory.decodeFile (path)? –

1
bitmap = BitmapFactory.decodeFile(imageInSD); 
3
iv.setImageURI(Uri.fromFile(in)); 
+0

Por favor, elabore su respuesta (en palabras) en lugar de solo proporcionar una sola línea de código. – JLRishe

+0

El código parece bastante claro – Nevir

1

Por qué no de esta manera:

ImageView MyImageView = (ImageView)findViewById(R.id.imageView1); 
Drawable d = Drawable.createFromPath(PATH TO FILE); 
MyImageView.setImageDrawable(d); 
0

No debería haber ninguna diferencia entre decodeStream() y decodeFile(). El método decodeFile() abre un inputstream y llama al decodeStream(). Esto ya fue respondido en este link

Cuestiones relacionadas