Canvas 类对 drawBitmap() 函数有很多重载。其中之一允许您通过非常舒适的界面缩放/剪切位图。
public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint
)
在哪里
- Bitmap bitmap - 是你要绘制的位图
- Rect src - 位图中的源矩形。如果它不为空,它将从您的位图中切出一块(在 src 的大小和位置)
- RectF dst - 此 Rect 将代表矩形,您的位图将适合。
- 油漆油漆- 可选油漆
现在举个例子!比方说,您想将位图宽度缩小到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
,您想与原始比较,那么您可以使用它(使用getWidth()
和获取宽度和高度getHeight()
):
/*Get these values*/
int originalWidth, originalHeight, scaledWidth, scaledHeight;
float scaleWidthRatio = (float)scaledWidth / originalWidth;
float scaleHeightRatio = (float)scaledHeight / originalHeight;