2011-10-04 34 views
27

necesito cargar una imagen de los activos para evitar un froyo 2.2.2 error al redimensionar las imágenes POT en algunos casos particulares. La forma de evitarlo es cargar los archivos de imagen del directorio de activos.¿Cómo cargar una imagen de los activos?

que estoy tratando de hacer con esto:

 String imagePath = "radiocd5.png"; 
    AssetManager mngr = context.getAssets(); 
    // Create an input stream to read from the asset folder 
    InputStream is=null; 
    try { 
     is = mngr.open(imagePath); 
    } catch (IOException e1) { e1.printStackTrace();} 

    //Get the texture from the Android resource directory 
    //InputStream is = context.getResources().openRawResource(R.drawable.radiocd5); 
    Bitmap bitmap = null; 
    try { 
     //BitmapFactory is an Android graphics utility for images 
     bitmap = BitmapFactory.decodeStream(is); 

    } finally { 
     //Always clear and close 
     try { 
      is.close(); 
      is = null; 
     } catch (IOException e) { 
     } 
    } 

Pero estoy consiguiendo NullPointerException en la línea is.close();

una captura de FileNotFoundException: radiocd5.png, pero ese archivo está en mi directorio de activos : S

¿Qué estoy haciendo mal? El archivo se llama radiocd5.png y está en el directorio assets

Respuesta

51

Puede siga mis tutoriales sobre visualización de datos de los activos: https://xjaphx.wordpress.com/2011/10/02/store-and-use-files-in-assets/
La muestra con la imagen y el texto de carga para mostrar.

ahora añade la parte correspondiente del enlace proporcionado (en caso de terremoto o algo así) ;-) Taifun

// load 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); 
} 
catch(IOException ex) { 
    return; 
} 
+0

lo estoy haciendo como en su tutorial, ¿por qué me sale un error? – NullPointerException

+0

¿qué error? por favor, tenga en cuenta que trato de ayudarlo siempre y cuando me brinde suficiente y buena información. –

+0

he editado mi pregunta, me da error en is.close(); línea – NullPointerException

3

En lugar de utilizar el directorio de activos, poner el archivo en/res/primas, y luego se puede acceder a él mediante el siguiente URI: android.resource://com.your.packagename/" + R.raw.radiocd5

+1

no tengo directorio de crudo, y no puedo crearlo porque esta aplicación se generará automáticamente con nuestro generador de empresa, y no puede crear directorios – NullPointerException

2
try { 
     InputStream istr =this.context.getAssets().open(P.strImage); 
     //set drawable from stream 
     this.imgProduct.setImageDrawable(Drawable.createFromStream(istr, null)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
1
protected String openImageInAssets(String imageName){ 
     String encodedImageBase64 = ""; 
     AssetManager assetManager = getAssets(); 
     InputStream fileStream = null; 
     try { 
      fileStream = assetManager.open(imageName); 
      if(fileStream != null){ 
       //     BitmapFactory.Options bfo = new BitmapFactory.Options(); 
       //     bfo.inPreferredConfig = Bitmap.Config.ARGB_8888; 
       //     Bitmap bitmap = BitmapFactory.decodeStream(fileStream, null, bfo); 

       Bitmap bitmap = BitmapFactory.decodeStream(fileStream); 
       // Convert bitmap to Base64 encoded image for web 
       ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

       // to get image extension file name split the received 
       int fileExtensionPosition = imageName.lastIndexOf('.'); 
       String fileExtension = imageName.substring(fileExtensionPosition+1); 
       //     Log.d(IConstants.TAG,"fileExtension: " + fileExtension); 

       if(fileExtension.equalsIgnoreCase("png")){ 
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 
        //      Log.d(IConstants.TAG,"fileExtension is PNG"); 
       }else if(fileExtension.equalsIgnoreCase("jpg") || fileExtension.equalsIgnoreCase("jpeg")){ 
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream); 
        //      Log.d(TAG,"fileExtension is JPG"); 
       } 

       byte[] byteArray = byteArrayOutputStream.toByteArray(); 
       String imgageBase64 = Base64.encodeToString(byteArray, Base64.DEFAULT); 
       encodedImageBase64 = "data:image/png;base64," + imgageBase64; 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return encodedImageBase64=""; 
     } 
     finally { 
      //Always clear and close 
      try { 
       if(fileStream != null) { 
        fileStream.close(); 
        fileStream = null; 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

//  Log.d(TAG,"encodedImageBase64: " + encodedImageBase64); 
     return encodedImageBase64; 
    } 
Cuestiones relacionadas