加载和检查位图:Bitmap类我们可通过BitmapFactory单元素就可以从文件加载位图。
由于我们将图像以资源形式储存,因此我们从assets/目录加载一幅图像。
InputStream inputStream = assetManager.open("bob.png");
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
我们可以通过一下方法获取图像的像素宽度和高度:
int width = bitmap.getWidth();
int height = bitmap.getHeight();
接下来我们想知道是以什么样的颜色格式来存储位图:
Bitmap.Config config = bitmap.getConfig();
Bitmap.Config是一个枚举,其值如下:
Config.ALPHA_8 Config.ARGB_4444 Config.ARGB_8888 Config.RGB_565
我们可尝试使用BitmapFactory以一个特定的颜色格式来加载一幅图像,甚至是它的原始格式不同。
InputStream inputStream = assetManager.open("bob.png");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_4444;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null, options);
我们可以通过BitmapFactory.Options.inPreferredConfig成员来为Bitmap实例指定一个所需的颜色格式。在这里,bob.png文件是ARGB888格式的PNG图像,我们可通过BitmapFactory加载它并将其转换成ARGB444位图。
也可以使用下面的静态方法来创建一个空的Bitmap实例:
Bitmap bitmap = Bitmap.createBitmap(int width, int height, Bitmap.Config config);
Canvas类也可以操作位图:
Canvas canvas = new Canvas(bitmap);
我们通过下面办法释放任何不再需要的位图:
Bitmap.recycle();
一旦我们加载位图,就可以通过Canvas来绘制,最简单的办法如下:
canvas.drawBitmap(Bitmap bitmap, float topLeftX, float topLeftY, Paint paint);
第二和第三个参数用于指定位图位于屏幕左上角的坐标。最后一个参数可以设置为null,也可以通过Paint来指定一下高级的绘制参数。
还有一个方法:
canvas.drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint);
这个方法非常有用,它允许我们通过第二个参数绘制指定的部分为图。Rect类保存一个矩形的左上角和右下角坐标。当我们通过第二个参数src来指定部分位图时,将会在位图的坐标系统内进行绘制,如果指定为null,那么将使用整个位图。
第三个参数定义了部分为图将要绘制在什么地方,同样采用Rect实例的形式。不过这一次的角坐标将通过Canvas上的目标对象的坐标系统来给定(一个视图或者另一个视图)。无论目标矩形比源矩形大还是小,Canvas都会做出调整。最后一个参数通常设置为null。不过这个缩放代价很大,只有在绝对必要的时候使用它。