Canvas クラスには、 drawBitmap() 関数のオーバーロードが多数あります。それらの 1 つは、非常に快適なインターフェイスを介してビットマップをスケーリング/カットすることを可能にします。
public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint
)
どこ
- Bitmap bitmap - 描画したいビットマップです
- Rect src - ビットマップからのソース rect。null でない場合は、ビットマップから (src のサイズと位置で) 部分を切り取ります。
- RectF dst - この Rect は Rectangle を表し、Bitmap が収まります。
- ペイントペイント- オプションのペイント
そして今、例!たとえば、ビットマップの幅を1/2に縮小し、高さを元の2倍に増やしたいとします。
float startX = 0; //the left
float startY = 0; //and top corner (place it wherever you want)
float endX = startX + bitmap.getWidth() * 0.5f; //right
float endY = startY + bitmap.getHeight() * 2.0f; //and bottom corner
canvas.drawBitmap(bitmap, null, new RectF(startX, startY, endX, endY), null);
アップデート
あなたのコメントを読んだ後、あなたが達成しようとしていることはよくわかりませんが、始めるための追加情報を次に示します。
Bitmap をメモリにロードせずに元のサイズを取得します。
BitmapFactory.Options options = new BitmapFactory.Options();
bitmapOptions.inJustDecodeBounds = true; // bitmap wont be loaded into the memory
//won't load the Bitmap, but the options will contain the required information.
BitmapFactory.decodeStream(inputStream, null, options);
/*or*/ BitmapFactory.decodeFile(pathName, options);
int originalWidth = bitmapOptions.outWidth;
int originalHeight = bitmapOptions.outHeight;
別の実際の (スケーリングされBitmap
た) 、またはImageView
オリジナルと比較したいものがある場合は、これを使用できます (幅と高さを取得するには、 and を使用getWidth()
しますgetHeight()
)。
/*Get these values*/
int originalWidth, originalHeight, scaledWidth, scaledHeight;
float scaleWidthRatio = (float)scaledWidth / originalWidth;
float scaleHeightRatio = (float)scaledHeight / originalHeight;