Autore Topic: Colorare una Bitmap in modo uniforme  (Letto 407 volte)

Offline Sime

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Sistema operativo:
    Windows 7
Colorare una Bitmap in modo uniforme
« il: 24 Settembre 2017, 22:53:12 CEST »
0
Ho bisogno di cambiare  colore a delle immagni bitmap.
Ad esempio  ;-) lo voglio fare diventare blu!
Cioè coloro tutto cio che ha opacità 255.

gli strumenti so che sono:
Canvas, Paint, Bitmap

L'unica idea che ho  è quella di cambiare ogni pixel singolarmente:

Qualcosa del genere:
Codice (Java): [Seleziona]
Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
imageBitmap = imageBitmap.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(imageBitmap);
Paint paint = new Paint();
paint.setARGB(255, 0, 0, 255);
for(--;--;--) for(--;--;--){
if(<qualcosa>)
canvas.drawPoint(x, y, paint);
}

Ma esiste qualcosa di più pratico?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 804
  • Respect: +168
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 10 x64
Re:Colorare una Bitmap in modo uniforme
« Risposta #1 il: 25 Settembre 2017, 12:23:32 CEST »
0
Io ho usato questo metodo.
(Nota: "color" è un colore, non un riferimento ad una risorsa)
Codice (Java): [Seleziona]
        private static Bitmap getMask(Bitmap source, int color) {
                Bitmap retVal;
               
                retVal = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
                retVal.eraseColor(color);
               
                Paint maskPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
                maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

                Canvas canvas = new Canvas()
                canvas.setBitmap(retVal);
                canvas.drawBitmap(source, 0, 0, maskPaint);
               
                return retVal;
        }

Puoi chiamarlo così:

Codice (Java): [Seleziona]
Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
imageBitmap = getMask(imageBitmap, Color.argb(255, 0, 0, 255));
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline Sime

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Sistema operativo:
    Windows 7
Re:Colorare una Bitmap in modo uniforme
« Risposta #2 il: 25 Settembre 2017, 18:36:08 CEST »
0
Perfetto funziona alla grande.

E' molto più efficente di quello che ho implementato io disegnando  pixel per pixel. ;-)

Grazie mille