2016-01-02 16 views
6

Come faccio a prendere una bitmap esistente, direCome per schiarire o scurire una bitmap

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.somebitmap); 

e scrivere un metodo che restituisce una versione oscura della bitmap?

private Bitmap darkenBitMap(Bitmap bm) { } 

Ho cercato di utilizzare Paint e Canvas senza risultati fino ad ora.

+0

Si potrebbe desiderare di utilizzare un filtro, se non si vuole scurire in modo permanente e salvare su disco, condividere, ecc ... Ecco alcuni riferimenti, http://gamedev.stackexchange.com/a/5394 http://stackoverflow.com/a/3499103/892500 –

risposta

19

Finalmente ho avuto. Spero che aiuti qualcun altro.

private Bitmap darkenBitMap(Bitmap bm) { 

    Canvas canvas = new Canvas(bm); 
    Paint p = new Paint(Color.RED); 
    //ColorFilter filter = new LightingColorFilter(0xFFFFFFFF , 0x00222222); // lighten 
    ColorFilter filter = new LightingColorFilter(0xFF7F7F7F, 0x00000000); // darken 
    p.setColorFilter(filter); 
    canvas.drawBitmap(bm, new Matrix(), p); 

    return bm; 
} 
0

Ecco un esempio che scorre su ciascun pixel.

/** 
* @param bitmap a mutable bitmap instance. 
*/ 
private void darkenBitmap(Bitmap bitmap) { 
    int height = bitmap.getHeight(); 
    int width = bitmap.getWidth(); 
    int pixel; 

    // Iterate over each row (y-axis) 
    for (int y = 0; y < height; y++) { 
     // and each column (x-axis) on that row 
     for (int x = 0; x < width; x++) { 
      pixel = bitmap.getPixel(x, y); 

      // TODO: Modify your pixel here. For samples, http://stackoverflow.com/questions/4928772/android-color-darker 

      bitmap.setPixel(x, y, pixel); 
     } 
    } 
} 

Il metodo richiede bitmap mutevole, così si avrà probabilmente bisogno di caricare la bitmap con le opzioni BitmapFactory. per esempio,

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inMutable = true; 
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.somebitmap, options); 

Si potrebbe anche creare una nuova bitmap mutabile dentro quel metodo, chiamare setPixel (...) su questo e restituirlo. Ma suggerirò caldamente di evitare questo tipo di allocazione di memoria se possibile.

0

Per rendere la vista più scura.

canvas.drawARGB(200, 0, 0, 0);

breve e semplice :)

0
private Bitmap darkenBitMap(Bitmap bm) { 
    Canvas canvas = new Canvas(bm); 
    canvas.drawARGB(1,0,0,0); 
    canvas.drawBitmap(bm, new Matrix(), new Paint()); 
    return bm; 
} 
+0

Sebbene questo codice possa rispondere alla domanda, fornendo un contesto aggiuntivo su come e/o perché risolve il problema potrebbe migliorare il valore a lungo termine della risposta. Si prega di leggere perché [non è consigliabile pubblicare solo risposte in codice] (https://meta.stackexchange.com/a/148274/341145) –

Problemi correlati