ビットマップがあります:
Bitmap bitmap = BitmapFactory.decodeFile("some/arbitrary/path/image.jpg");
しかし、ユーザーに画像を表示するつもりはありません。アルファを100(255のうち)にしたい。これが不可能な場合、Bitmap
の不透明度を設定できますか?
Bitmap
の代わりに BitmapDrawable を試すこともできます。これがあなたに役立つかどうかは、ビットマップの使用方法によって異なります...
編集
コメンターがアルファ付きのビットマップを保存する方法を尋ねたとき、以下のコードがあります。
// 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);
私が知る限り、ビットマップ自体に不透明度やその他のカラーフィルターを設定することはできません。画像を使用するときにアルファを設定する必要があります。
ImageViewを使用している場合、 ImageView.setAlpha() があります。
Canvasを使用している場合は、 Paint.setAlpha() を使用する必要があります。
Paint paint = new Paint();
Paint.setAlpha(100);
canvas.drawBitmap(bitmap, src, dst, Paint);
また、WarrenFaithの答えを取り入れて、ドロアブルが必要な場所でビットマップを使用する場合は、 BitmapDrawable.setAlpha() を使用できます。
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;
}
Bitmap bgr = BitmapFactory.decodeResource(getResources(),R.drawable.main_logo_2);
Paint transparentpainthack = new Paint();
transparentpainthack.setAlpha(100);
canvas.drawBitmap(bgr, 0, 0, transparentpainthack);
https://dzone.com/articles/adjusting-opacity-Android 提案:
/**
* @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;
}
DST_IN を使用すると、既に透明な画像の透明度を(リセットするのではなく)変更できます。つまり、画像をますます透明にすることができます。
Drawableを使用して画像を表示している場合、アルファを次のように変更できます。
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);
}
}