2012-02-01 15 views
9

estoy usando el siguiente método para extraer un archivo PNG de la carpeta de activos en mi aplicación Android:Android: PNG Transparencia defecto con BitmapFactory.decodeStream (...) y Activos Carpeta

public static Bitmap getBitmapFromAssets(Context context, String fileName) { 
     try { 
      AssetManager assetManager = context.getAssets(); 
      InputStream inputStream = assetManager.open(fileName); 
      Bitmap bitmap = BitmapFactory.decodeStream(inputStream); 
      return bitmap; 
     } 
     catch(Exception ex) { 
      ex.printStackTrace(); 
      return null; 
     } 
    } 

Estoy a continuación, estableciendo el origen de un ImageView, en el elemento de un GridView, en ese mapa de bits.

Aquí es el XML disposición en cuestión:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/containingLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:gravity="center_horizontal" 
    android:background="@android:color/transparent" 
    android:padding="0dp" 
    android:layout_margin="0dp" 
> 
    <ImageView 
     android:id="@+id/ivPackageIcon" 
     style="@style/smLargeGridItemPackageIconStyle" 
    /> 
</LinearLayout> 

Y el estilo que se refiere dicho XML es:

<style name="smLargeGridItemPackageIconStyle"> 
     <item name="android:scaleType">fitXY</item> 
     <item name="android:layout_width">100dp</item> 
     <item name="android:layout_height">142dp</item> 
     <item name="android:layout_margin">5dp</item> 
     <item name="android:background">@android:color/transparent</item> 
    </style> 

Aquí está el código que establece la fuente de la ImageView:

ImageView ivPackageIcon = (ImageView)containingView.findViewById(R.id.ivPackageIcon); 
     if(ivPackageIcon != null) { 
      Bitmap coverImage = getBitmapFromAssets(containingView.getContext(), "myimage.png"); 
      ivPackageIcon.setImageBitmap(coverImage); 
     } 

La imagen PNG tiene algunas áreas transparentes, pero por alguna razón cuando la imagen se muestra en mi GridV iew, las áreas transparentes aparecen como negras.

Para adelantarse a algunas preguntas: No, el fondo de la actividad, ImageView, GridView y el elemento GridView no son negros. De hecho, independientemente de los colores de fondo, las partes transparentes de la imagen siempre aparecen en negro.

considerar esto, aunque ... Si coloco la imagen PNG en la carpeta estirable y establezca el ImageView de la siguiente manera, la transparencia es perfecta:

ivPackageIcon.setImageResource(R.drawable.myimage); 

Estoy bastante seguro de que estoy usando el método decodeStream (...) incorrectamente de alguna manera, pero no sé lo que estoy haciendo mal. Incluso modifiqué mi método original para establecer algunas opciones como se muestra aquí:

public static Bitmap getBitmapFromAssets(Context context, String fileName) { 
     try { 
      AssetManager assetManager = context.getAssets(); 
      InputStream inputStream = assetManager.open(fileName); 

      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inDither = true; 
      options.inPreferredConfig = Config.ARGB_8888; 

      Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options); 
      return bitmap; 
     } 
     catch(Exception ex) { 
      ex.printStackTrace(); 
      return null; 
     } 
    } 

Pero eso me dio el mismo resultado pobre.

¿Alguna idea, alguien?

Gracias.

+0

Tengo el mismo problema :(¿Alguna actualización? – fvisticot

+0

Parece que está perdiendo su canal alfa. ¿Puede volcar los píxeles en el objeto Bitmap (después de la decodificación) y comprobar que tiene los valores alfa correctos en las áreas transparentes? Usa Bitmap.getPixels(). – SirKnigget

Respuesta

0

En lugar de esto, tratar:

ImageView img=new ImageView(this); 
     Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null); 
     img.setImageDrawable(d); 
0

En caso de que su imagen está hecha de recurso de aplicación y se coloca debajo de res/dibujable por ejemplo res/en lugar de una de las carpetas específicas de resolución (/ dibujable-IPAP)

el compilador androide es la optimización del PNG para los píxeles transparentes se hacen blanco (o negro en el caso de los archivos GIFF)

Resolución: mover el archivo PNG de res/dibujable-IPAP o una de la otra carpetas dibujables, una y deberías estar bien.

Cuestiones relacionadas