如何使位图透明?

时间:2013-02-26 08:00:24

标签: android bitmap imageview opacity transparent

/**
 * @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,我ImageView Bitmap半透明。

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

然而,Imageview在不是白色之前显示更多的暗色调。如何使用Bitmap创建半透明(白色背景)Imageview?

6 个答案:

答案 0 :(得分: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,并返回一个Bitmap,其中颜色为transparentColor的每个像素都是透明的。这适用于API低至8级,我没有在任何更低的测试。

我通常使用Color.RED之类的东西来制作透明像素,因为我的资产中并没有使用大量的RED,但如果我这样做是自定义的红色。

答案 1 :(得分:3)

试试这个。另请注意,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);

答案 2 :(得分:2)

使现有位图透明是很简单的。

如果要在进一步绘制之前使位图透明,请遵循此操作。

如果您的位图是mBitmap,则只需使用:-

mBitmap.eraseColor(Color.TRANSPARENT) 

就这样。祝你好运!

答案 3 :(得分:0)

试试这个,

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

答案 4 :(得分:0)

@ akaya的答案是正确的,除了不推荐使用构造函数。自API 4以来的新方法是使用:

BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
drawable.setAlpha(100);

答案 5 :(得分:0)

添加方法

Bitmap bmp; DrawView DrawView;

private static Bitmap makeTransparentBitmap(Bitmap bmp, int alpha) {
        Bitmap transBmp = Bitmap.createBitmap(bmp.getWidth(),
                bmp.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(transBmp);
        final Paint paint = new Paint();
        paint.setAlpha(alpha);
        canvas.drawBitmap(bmp, 0, 0, paint);
        return transBmp;
    }


@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.rgb(43,44,45));

    bmp = BitmapFactory.decodeResource(getResources(), R.drawable.mouse);
    canvas.drawBitmap(bmp, pos_x, pos_y, null); 

}

您的活动:

bmp = makeTransparentBitmap( bmp, 122 );
DrawView.invalidate();

DrawView

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    DrawView = new DrawView(this);
    setContentView( DrawView );
}

我找到了这个答案here