2016-01-02 2 views
6

Wie kann ich nehmen eine vorhandene Bitmap, sagenWie aufzuhellen oder abzudunkeln eine Bitmap

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

und ein Verfahren schreiben, die eine abgedunkelte Version der Bitmap zurückgibt?

private Bitmap darkenBitMap(Bitmap bm) { } 

Ich habe versucht, Paint und Canvas ohne Ergebnisse bisher zu verwenden.

+0

Sie können einen Filter verwenden möchten, wenn Sie nicht wollen, es dauerhaft verdunkeln und auf der Festplatte, zu teilen usw. speichern ... Hier sind einige Referenzen, http://gamedev.stackexchange.com/a/5394 http://stackoverflow.com/a/3499103/892500 –

Antwort

19

Ich habe es endlich. Hoffe es hilft jemand anderem.

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

Hier ist ein Beispiel, das über jedes Pixel iteriert.

/** 
* @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); 
     } 
    } 
} 

Das Verfahren erfordert wandelbar Bitmap, deshalb brauchen Sie wahrscheinlich Ihre Bitmap mit BitmapFactory Optionen zu laden. z.B.

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

Genauso gut könnte man einen neuen wandelbaren Bitmap innerhalb dieser Methode erstellen, rufen setPixel (...) auf dem und es zurück. Aber ich werde dringend empfehlen, diese Art von Speicherzuweisung zu vermeiden, wenn dies möglich ist.

0

Um die Sicht dunkler zu machen.

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

Kurz und einfach :)

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

Während dieser Code die Frage beantworten kann, bietet zusätzliche Kontext, wie und/oder warum es löst das Problem würde den langfristigen Wert der Antwort verbessern. Bitte lesen Sie, warum [es ist nicht klug, Code-only-Antworten zu schreiben] (https://meta.stackexchange.com/a/148274/341145) –

Verwandte Themen