2016-07-25 21 views
0

Ich bin ziemlich neu in Android-Entwicklung und ich habe das folgende Problem.Warum erhalte ich einen schwarzen Hintergrund, wenn ich auf diese Weise ein neues Bitmap erstelle? Wie kann ich einen transparenten Hintergrund erhalten?

Ich habe diesen Code implementieren, die eine Bitmap mit Leinwand zeichnen (es zeichnet 5 Symbole nebeneinander), so dass dies mein Code:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Retrieve the ImageView having id="star_container" (where to put the star.png image): 
    ImageView myImageView = (ImageView) findViewById(R.id.star_container); 

    // Create a Bitmap image startin from the star.png into the "/res/drawable/" directory: 
    Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.star); 

    // Create a new image bitmap having width to hold 5 star.png image: 
    Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth() * 5, myBitmap.getHeight(), Bitmap.Config.RGB_565); 

    /* Attach a brand new canvas to this new Bitmap. 
     The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: 
     1) a Bitmap to hold the pixels. 
     2) a Canvas to host the draw calls (writing into the bitmap). 
     3) a drawing primitive (e.g. Rect, Path, text, Bitmap). 
     4) a paint (to describe the colors and styles for the drawing). 
    */ 
    Canvas tempCanvas = new Canvas(tempBitmap); 

    // Draw the image bitmap into the cavas: 
    tempCanvas.drawBitmap(myBitmap, 0, 0, null); 
    tempCanvas.drawBitmap(myBitmap, myBitmap.getWidth(), 0, null); 
    tempCanvas.drawBitmap(myBitmap, myBitmap.getWidth() * 2, 0, null); 
    tempCanvas.drawBitmap(myBitmap, myBitmap.getWidth() * 3, 0, null); 
    tempCanvas.drawBitmap(myBitmap, myBitmap.getWidth() * 4, 0, null); 

    myImageView.setImageDrawable(new BitmapDrawable(getResources(), tempBitmap)); 

} 

So funktioniert es gut und das Bild ist korrekt erstellt und die 5 star.png Bilder sind nebeneinander dargestellt).

Das einzige Problem ist, dass der Hintergrund des neuen Bildes (hinter dem star.png Bilder zeigte) schwarz ist. Das star.png Bild hat einen weißen Hintergrund.

Ich denke, es ist von dieser Linie ab:

// Create a new image bitmap having width to hold 5 star.png image: 
Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth() * 5, myBitmap.getHeight(), Bitmap.Config.RGB_565); 

In particolar von Bitmap.Config.RGB_565.

Was genau bedeutet?

Wie kann ich diesen Wert ändern, um einen transparenten Hintergrund zu erhalten? (Oder zumindest die Farbe zu ändern, zum Beispiel einen weißen Hintergrund zu erhalten) für createBitmap

+1

Ändern Sie das in 'Bitmap.config.ARGB_8888'. Weil Transparenz durch den Alphakanal definiert wird (das "A" im ARGB). Mit "RGB" gibt es keinen Alpha-Kanal => keine Transparenz – wanpanman

+0

Stellen Sie auch sicher, dass die 'png's selbst transparenten Hintergrund haben ...' weiß' ist nicht transparent –

+0

RGB_565 bedeutet, dass Sie 5 Bits für rot, 6 für grün verwenden, 5 für Blau und 0 für Alpha. Es erstellt eine kleinere Bitmap in Bytes, aber weniger Farbtiefe und keine Transparenz. Für Transparenz verwenden Sie in der Regel ARGB_8888-8 für jede Farbe und 8 für Transparenz. –

Antwort

0

In der Android-Dokumentation finden Sie, dass finden:

Android Doc for createBitmap

(für das letzte Argument) Wenn die Konfiguration pro Pixel Alpha (z. B. RGB_565) nicht unterstützt, werden die Alpha-Bytes in den Farben [] ignoriert (angenommen als FF).

Verwenden Sie stattdessen Bitmap.Config.ARGB_8888 als letztes Argument.

In dieser Konfiguration wird jedes Pixel auf 4 Bytes gespeichert.