ビットマップを引き伸ばさずに幅 (または高さ) を増やす方法はありますか? 基本的に、200x100 のビットマップがあり、左に 50 (白/透明) ピクセル、右に 50 ピクセルを追加して正方形 (200x200) にしたいと考えています。
このビットマップを画面に描画したくないので、理想的には、変換マトリックスを「スマートな」方法などで使用する必要がありますが、理解できません...
ビットマップを引き伸ばさずに幅 (または高さ) を増やす方法はありますか? 基本的に、200x100 のビットマップがあり、左に 50 (白/透明) ピクセル、右に 50 ピクセルを追加して正方形 (200x200) にしたいと考えています。
このビットマップを画面に描画したくないので、理想的には、変換マトリックスを「スマートな」方法などで使用する必要がありますが、理解できません...
次のようなことを試すことができます:
// creating a dummy bitmap
Bitmap source = Bitmap.createBitmap(100, 200, Bitmap.Config.ARGB_8888);
Bitmap background;
Canvas canvas;
if(source.getHeight() == source.getWidth()) // do nothing
return;
// create a new Bitmap with the bigger side (to get a square)
if(source.getHeight() > source.getWidth()) {
background = Bitmap.createBitmap(source.getHeight(), source.getHeight(), Bitmap.Config.ARGB_8888);
canvas = new Canvas(background);
// draw the source image centered
canvas.drawBitmap(source, source.getHeight()/4, 0, new Paint());
} else {
background = Bitmap.createBitmap(source.getWidth(), source.getWidth(), Bitmap.Config.ARGB_8888);
canvas = new Canvas(background);
// draw the source image centered
canvas.drawBitmap(source, 0, source.getWidth()/4, new Paint());
}
source.recycle();
canvas.setBitmap(null);
// update the source image
source = background;
注: 黒い枠は画像の一部ではありません。画像の実際のサイズを確認し、黒やソース画像の色 (常に中央に描画される) と区別するために、背景色として濃い赤を選択しました。
Canvas に描画すると、画面に表示されなくなります。コードをテストするためだけに ImageView を使用しました。
w=200,h=100 に対して得られる出力は次のとおりです。
w=100,h=200 に対して得られる出力は次のとおりです。