wake-up-neo.com

Wie kann man die Deckkraft einer Bitmap ändern?

Ich habe eine Bitmap:

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

Aber ich werde das Bild dem Benutzer nicht anzeigen. Ich möchte, dass der Alpha-Wert 100 ist (von 255). Wenn dies nicht möglich ist, kann ich die Deckkraft der Bitmap einstellen? 

30
Mohit Deshpande

Sie könnten auch BitmapDrawable anstelle von Bitmap versuchen. Ob dies für Sie nützlich ist, hängt davon ab, wie Sie die Bitmap verwenden ...

Bearbeiten

Als ein Kommentator fragte, wie er die Bitmap mit Alpha speichern kann, gibt es hier einen 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

Soweit ich weiß, können Deckkraft oder andere Farbfilter nicht in der Bitmap selbst festgelegt werden. Sie müssen das Alpha einstellen, wenn Sie das Bild verwenden:

Wenn Sie ImageView verwenden, gibt es ImageView.setAlpha () .

Wenn Sie eine Leinwand verwenden, müssen Sie Paint.setAlpha () verwenden:

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

Wenn Sie die Antwort von WarrenFaith verwenden, können Sie auch BitmapDrawable.setAlpha () verwenden, wenn Sie die Bitmap verwenden möchten, bei der eine Zeichenfunktion erforderlich ist.

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 schlägt vor:

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

Beachten Sie, dass Sie mit DST_IN die Transparenz eines bereits transparenten Bildes ändern (statt zurücksetzen) können, dh Sie können das Bild immer transparenter machen.

Wenn Sie ein Drawable verwenden, um das Bild anzuzeigen, können Sie das Alpha wie folgt ändern:

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