2013-01-25 13 views
12

Ho un'app per Android che carica un'immagine come bitmap e la visualizza in un ImageView. Il problema è che l'immagine sembra avere uno sfondo trasparente; questo fa sì che parte del testo nero sull'immagine scompaia dallo sfondo nero.Bitmap Android: Converti pixel trasparenti in un colore

Se si imposta lo sfondo di ImageView su bianco, questo tipo di opere funziona, ma ottengo brutti bordi grandi sull'immagine in cui è allungata per adattarla al genitore (l'immagine effettiva viene ridimensionata al centro).

Quindi, voglio convertire i pixel trasparenti nella bitmap in un colore a tinta unita, ma non riesco a capire come farlo!

Qualsiasi aiuto sarebbe gradito!

Grazie Chris

+0

Se si disponesse di una schermata che sarebbe di grande aiuto. Mi sembra che tu stia cercando di risolvere questo nel modo sbagliato. Vorrei provare a sovrapporre le viste l'una sull'altra per ottenere l'effetto desiderato. In questo modo hai una vista a colori di backgound principale, quindi la sovrapponi con una vista immagine con lo sfondo bianco e l'immagine di origine. – Nathan

risposta

22

Se si include l'immagine come una risorsa, è più semplice per modificare solo l'immagine se stessi in un programma come gimp. È possibile aggiungere il proprio sfondo lì ed essere sicuri di come apparirà e non utilizzare la potenza di elaborazione che modifica l'immagine ogni volta che viene caricata.

Se non si ha il controllo sull'immagine, è possibile modificarlo facendo qualcosa di simile, assumendo che il proprio Bitmap sia chiamato image.

Bitmap imageWithBG = Bitmap.createBitmap(image.getWidth(), image.getHeight(),image.getConfig()); // Create another image the same size 
imageWithBG.eraseColor(Color.WHITE); // set its background to white, or whatever color you want 
Canvas canvas = new Canvas(imageWithBG); // create a canvas to draw on the new image 
canvas.drawBitmap(image, 0f, 0f, null); // draw old image on the background 
image.recycle(); // clear out old image 
+0

Grazie - che ha fatto! Anche efficiente! – ccbunney

5

È possibile scorrere ogni pixel e verificare se è trasparente.

Qualcosa di simile. (Testato)

 Bitmap b = ...; 
     for(int x = 0; x<b.getWidth(); x++){ 
      for(int y = 0; y<b.getHeight(); y++){ 
       if(b.getPixel(x, y) == Color.TRANSPARENT){ 
        b.setPixel(x, y, Color.WHITE); 
       } 
      } 
     } 
+2

Se stai usando questa strategia, non usare 'getPixel'. Ogni volta che iterate attraverso ogni pixel in 'Bitmap' dovreste favorire [' getPixels'] (http://developer.android.com/reference/android/graphics/Bitmap.html#getPixels%28int [],% 20int, % 20int,% 20int,% 20int,% 20int,% 20int% 29). – kabuko

+1

@MrZander - Ho provato questo metodo e non ha funzionato. L'aggiunta di una dichiarazione di debug ha mostrato che stava trovando i pixel TRASPARENTI, ma impostarli su WHITE (o RED o qualsiasi altro colore) non ha effetto. L'immagine sembra ancora avere la trasparenza .... strano ??? – ccbunney

+0

@KernowBunney Probabilmente perché la tua bitmap non è mutabile. Prova a eseguire 'Bitmap b = yourbitmap.copy (Bitmap.Config.ARGB_8888, true)' e imposta la nuova bitmap come immagine. Inoltre, questo metodo non è stato testato e non so se sia il metodo più efficiente. @kabuko potrebbe avere un punto. – MrZander