web-dev-qa-db-fra.com

Comment changer l'opacité d'un bitmap?

J'ai un bitmap:

Bitmap bitmap = BitmapFactory.decodeFile("some/arbitrary/path/image.jpg");

Mais je ne vais pas afficher l'image à l'utilisateur. Je veux que l'alpha soit 100 (sur 255). Si ce n'est pas possible, puis-je régler l'opacité de la variable Bitmap

30
Mohit Deshpande

Vous pouvez également essayer BitmapDrawable au lieu de Bitmap. Si cela vous est utile dépend de la façon dont vous utilisez le bitmap ...

Modifier

Comme un commentateur a demandé comment il peut stocker le bitmap avec alpha, voici du code:

// lets create a new empty bitmap
Bitmap newBitmap = Bitmap.createBitmap(originalBitmap.getWidth(), originalBitmap.getHeight(), Bitmap.Config.ARGB_8888);
// create a canvas where we can draw on
Canvas canvas = new Canvas(newBitmap);
// create a Paint instance with alpha
Paint alphaPaint = new Paint();
alphaPaint.setAlpha(42);
// now lets draw using alphaPaint instance
canvas.drawBitmap(originalBitmap, 0, 0, alphaPaint);

// now lets store the bitmap to a file - the canvas has drawn on the newBitmap, so we can just store that one
// please add stream handling with try/catch blocks
FileOutputStream fos = new FileOutputStream(new File("/awesome/path/to/bitmap.png"));
newBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
28
WarrenFaith

Autant que je sache, l'opacité ou d'autres filtres de couleur ne peuvent pas être définis sur le bitmap lui-même. Vous devrez définir l'alpha lorsque vous utiliserez l'image:

Si vous utilisez ImageView, il existe ImageView.setAlpha () .

Si vous utilisez un canevas, vous devez utiliser Paint.setAlpha () :

Paint paint = new Paint();
Paint.setAlpha(100);
canvas.drawBitmap(bitmap, src, dst, Paint);

En outre, en incorporant la réponse de WarrenFaith, si vous utilisez le bitmap lorsqu'un dessin est requis, vous pouvez utiliser BitmapDrawable.setAlpha () .

75
Matthew Willis
public Bitmap makeTransparent(Bitmap src, int value) {  
    int width = src.getWidth();
    int height = src.getHeight();
       Bitmap transBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
       Canvas canvas = new Canvas(transBitmap);
       canvas.drawARGB(0, 0, 0, 0);
        // config Paint
        final Paint paint = new Paint();
        Paint.setAlpha(value);
        canvas.drawBitmap(src, 0, 0, Paint);    
        return transBitmap;
}
18
Ruban
Bitmap bgr = BitmapFactory.decodeResource(getResources(),R.drawable.main_logo_2);       
Paint transparentpainthack = new Paint();
transparentpainthack.setAlpha(100);
canvas.drawBitmap(bgr, 0, 0, transparentpainthack);
17
Martin

https://dzone.com/articles/adjusting-opacity-Android propose:

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

Notez qu'avec DST_IN vous pouvez modifier (plutôt que réinitialiser) la transparence d’une image déjà transparente, c’est-à-dire que vous pouvez rendre l’image plus transparente.

1

Si vous utilisez Drawable pour afficher l'image, vous pouvez modifier l'alpha comme suit:

private Drawable mTriangle;
mTriangle = context.getResources().getDrawable(R.drawable.triangle_arrow_for_radar);

...

protected void onDraw(Canvas canvas)
{
    // Draw the triangle arrow
    float imageTargetWidth = getWidth() / 15;
    float scale = mTriangle.getIntrinsicWidth() / imageTargetWidth;

    int imgWidth  = (int)(imageTargetWidth);
    int imgHeight = (int)(mTriangle.getIntrinsicHeight() / scale);

    if (mTriangle != null)
    {
        mTriangle.setBounds(getWidth() / 2 - imgWidth / 2, getHeight() / 2 -       imgHeight / 2, getWidth() / 2 + imgWidth / 2, getHeight() / 2 + imgHeight / 2);

        mTriangle.setAlpha(150); // from (transparent) to 255 (opaque)
        mTriangle.draw(canvas);
    }
}
0
Frédéric