Android полупрозрачный растровый фон черный - PullRequest
1 голос
/ 12 сентября 2011

Я пытаюсь создать полупрозрачные растровые изображения, я использовал этот код:

private Bitmap SemiTransparent(Bitmap bitmap, int opacity) {


    // Create an array to hold the data of bitmap for which semi transparent bitmap is to be obtained
    int[] data = new int[(int)(bitmap.getWidth()) + 1];

    for (int y = 0; y < bitmap.getHeight(); ++y)
    {
           // Get a single line of data
          bitmap.getPixels(data, 0, bitmap.getWidth(), 0, y,bitmap.getWidth(), 1);     

     // Reset the alpha values 
           for (int x = bitmap.getWidth(); x>0; --x) 
           {

                data[x] = (data[x] & 0x00ffffff) | (opacity << 24);
           }     
          //fill alphaBitmap data
           bitmap.setPixels(data, 0, bitmap.getWidth(), 0, y, bitmap.getWidth(), 1);

    }


         return bitmap;
}

Единственная проблема - цвет фона (прозрачный) всегда черный - как я могу изменить это, чтобы сделать цвет фонаполностью прозрачный, а остальное все еще полупрозрачный?

1 Ответ

2 голосов
/ 13 февраля 2013

Используйте этот метод, чтобы сделать растровое изображение прозрачным:

/**
 * @param bitmap The source bitmap.
 * @param opacity a value between 0 (completely transparent) and 255 (completely
 * opaque).
 * @return The opacity-adjusted bitmap.  If the source bitmap is mutable it will be
 * adjusted and returned, otherwise a new bitmap is created.
 */
private Bitmap adjustOpacity(Bitmap bitmap, int opacity)
{
    Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
    Canvas canvas = new Canvas(mutableBitmap);
    int colour = (opacity & 0xFF) << 24;
    canvas.drawColor(colour, PorterDuff.Mode.DST_IN);
    return mutableBitmap;
}

Смотрите объяснение здесь: http://blog.uncommons.org/2011/01/12/adjusting-the-opacity-of-an-android-bitmap/

В блоге он проверяет, является ли растровое изображение изменяемым или нет - что может вызвать проблемы, если растровое изображение является изменяемым, но не имеет конфигурации ARGB_8888 - поэтому используйте вместо этого мой метод.

...