如何更改位图的不透明度?

2022-09-01 07:04:43

我有一个位图:

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

但我不打算向用户显示图像。我希望 alpha 是 100(满分 255 分)。如果这是不可能的,我可以设置 的不透明度吗?Bitmap


答案 1

据我所知,不能在位图本身上设置不透明度或其他颜色滤镜。使用图像时,您需要设置 alpha:

如果您使用的是 ImageView,则有 ImageView.setAlpha()。

如果您使用的是 Canvas,则需要使用 Paint.setAlpha()

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

此外,结合WarrenFaith的答案,如果您要在需要可绘制对象的地方使用位图,则可以使用BitmapDrawable.setAlpha()


答案 2

您也可以尝试位图可绘制而不是 .这是否对您有用取决于您使用位图的方式...Bitmap

编辑

正如一位评论者问他如何使用alpha存储位图时,这里有一些代码:

// 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);

推荐