正文

使用内置Gallery应用程序选择图像(6)

Android多媒体开发高级编程 作者:(美)艾佛瑞


在深入探讨用来更改图像的具体机制之前,让我们看看如何创建一个新的空位图对象,并在其上绘制已有的位图。这是将用来创建图像的更改版本的过程。

上述示例获得了一个位图对象,使用用户选择的一幅图像对其进行实例化。正如在第1章中所介绍的那样,通过调用BitmapFactory的decodeStream方法对它进行实例化。

Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().

openInputStream(imageFileUri), null, bmpFactoryOptions);

为了使用该位图对象作为图像编辑实验的数据源,需要能够以所应用的效果在屏幕上绘制该位图。此外,最好能够将它绘制到可以用来保存结果图像的对象中。因此,需要创建一个空的位图对象,其尺寸与现有位图对象的尺寸相同,并且将它作为更改位图对象的目标。

Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWidth(),

bmp.getHeight(),bmp.getConfig());

当创建这个更改位图对象alteredBitmap时,其宽度、高度和颜色深度均与源位图对象(bmp)相同。由于使用Bitmap类的createBitmap方法,并且以宽度、高度和Bitmap.Config对象作为参数,因此将获得一个可变的位图对象作为返回值。可变意味着可以更改该位图表示的像素值。如果有一个不可变的位图对象,那么不能对其进行绘制。此方法调用是唯一可用于实例化一个可变位图对象的方式之一。

下面需要的是一个Canvas(画布)对象。正如您所期望的那样,在Android中画布是可用于在其上进行绘制的对象。可以通过在其构造函数中传入一个位图对象来创建Canvas对象,随后就可以将其用于绘制。

Canvas canvas = new Canvas(alteredBitmap);

最后,将需要一个Paint(画刷)对象。当进行实际的绘制时,Paint对象将发挥作用。具体而言,它使得我们能够改变诸如颜色和对比度之类的参数,后面章节将对其进行详细的介绍。目前使用默认的Paint对象。

Paint paint = new Paint();

现在,为了在一个空的可变位图对象上绘制源位图对象,我们已经具备了所有必需的组件。下面将刚才描述的所有代码汇总在一起。

Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().

openInputStream(imageFileUri), null, bmpFactoryOptions);

Bitmap alteredBitmap = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(),

bmp.getConfig());

Canvas canvas = new Canvas(alteredBitmap);

Paint paint = new Paint();


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号