Android游戏编程之基本图形编程


使用位图

加载和检查位图: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。不过这个缩放代价很大,只有在绝对必要的时候使用它。

  • 1
  • 2
  • 3
  • 下一页

相关内容