2013-02-26 23 views
2
/** 
* @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. 
*   Source : http://stackoverflow.com/questions/7392062/android- 
*   semitransparent-bitmap-background-is-black/14858913#14858913 
*/ 
private Bitmap adjustOpacity(Bitmap bitmap, int opacity) { 
    Bitmap mutableBitmap = bitmap.isMutable() ? bitmap : 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; 
} 

Использование adjustOpacity, я принимаю ImageViewBitmap быть полупрозрачным.Как сделать растровое изображение прозрачным?

Bitmap newBitmap = adjustOpacity(orignalBitmap, 10); 
view.setImageBitmap(newBitmap); 
view.setBackgroundColor(Color.WHITE); 

Однако Imageview показать еще darkent до этого не белый. Как сделать полупрозрачный (белый фон) Imageview с помощью Bitmap?

ответ

0

попробовать это,

newBitmap.setImageResource(android.R.color.transparent); 
+1

вы имеете в виду view.setImageResource (android.R.color.transparent); – vingorius

1

Попробуйте это. Также отметим, что SetAlpha находится в диапазоне 0-255

//bmp is your Bitmap object 

BitmapDrawable bd = new BitmapDrawable(bmp); 
bd.setAlpha(50); 

ImageView v = (ImageView) findViewById(R.id.image); 
v.setImageDrawable(bd); 
+0

Спасибо, я имею в виду, я хочу изменить растровое изображение! – vingorius

+0

@vingorius Вы должны изменить заголовок вопроса, затем – akaya

+0

Спасибо @kaya, я буду. – vingorius

6
// Convert transparentColor to be transparent in a Bitmap. 
public static Bitmap makeTransparent(Bitmap bit, Color transparentColor) { 
    int width = bit.getWidth(); 
    int height = bit.getHeight(); 
    Bitmap myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    int [] allpixels = new int [ myBitmap.getHeight()*myBitmap.getWidth()]; 
    bit.getPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(),myBitmap.getHeight()); 
    myBitmap.setPixels(allpixels, 0, width, 0, 0, width, height); 

    for(int i =0; i<myBitmap.getHeight()*myBitmap.getWidth();i++){ 
    if(allpixels[i] == transparentColor) 

       allpixels[i] = Color.alpha(Color.TRANSPARENT); 
    } 

     myBitmap.setPixels(allpixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight()); 
     return myBitmap; 
} 

Приведенный выше код будет принимать растрового изображения, и возвращать Bitmap, где каждый пиксель которой цвет TransparentColor является прозрачным. Это работает в API как низкий, как уровень 8, и я не тестировал его ни в чем ниже.

Обычно я использую что-то наподобие Color.RED, чтобы сделать мои прозрачные пиксели, потому что я не использую много RED в своих активах, но если я делаю это особый красный цвет.

0

@ Ответ akaya - это правильный путь, за исключением того, что конструктор устарел. Новый способ, так как API 4 будет использовать:

BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap); 
drawable.setAlpha(100); 
Смежные вопросы