嵌入与显示资源
从头开始创建bitmaps
在bitmaps中画现有的图形
除了Loading之外,另外一个创建图片的最简单方法是:把现有的显示对象的像素数据绘制成一个BitmapData。可以用BitmapData的draw()方法。
我们看看构造函数的每个参数:
- source:绘制像素对象,无论是DisplayObject或者BitmapData,只要实现IBitmapDrawable接口。
- matrix:矩阵实例被用来改变所绘像素的大小,位置,旋转角度
- colorTransform:该颜色通道用来改变所绘制像素的颜色。
- blendMode:混合模式,当它们把像素绘制到一个BitmapData实例上面,也就是叠加方式。
- clipRect:范围。
- smoothing:绘制的像索尺寸扩大时变得平滑。
指定源
构造函数中的第一个参数,source,就是你要拷贝像素数据的对象。可以使任何现是对象实例(Sprite,MovieClip,TextField,等等)或者是别的BitmapData实例,只要他们实现了IBitmapData接口。
当你调用draw()方法,源对象的像素数据就被画进BitmapData实例了,接着就断开了与源对象的联系。这意味着,无论你怎么搞愿对象,BitmapData的像素数据都不会改变。如果你呼叫这个方法而不指定其他参数(你可以看到,它们都是可选的)。源对象的像素数据只是被拷贝而没有任何颜色转换操作。我们可以通过一个例子来理解。
接下来的类可以在章节源文件中找到,文件名是DrawTest。这个类只是简单的测试一下draw()方法。重要部分用用粗体凸显。(记住,附录中有介绍如何创建项目和编译swf文件,如果不了解怎么创建SWF文件就去查看附录吧。这是最后一次提醒了。)
如果你编译并且测试这个影片,或者运行此章的文件中的SWF文件。你将看到一个圆,跟随着鼠标。该功能是从构造函数中调用createCirecle()方法。createBitmap(),也是在构造函数中调用的,这个方法创建一个BitmapData实例,一开始并没有被画入任何对象。芳儿,在构造BitmapData的时候,我设定了其像素数据的尺寸和舞台一样大小,像素能够透明,任何未定义的像素将完全透明(黑色,虽然在这个例子中这并不重要)。结果是,这个位图在最初的时候和舞台的大小相同,而且完全透明。如果你按任何键,onStageKeyDown() 方法就被激活了,如果被按下的键是空格,BitmapData实例上的draw()方法就被调用了。我只给舞台传递一个副本,它本身就是一个显示对象,被画进bitmap 数据中,接着就立即显示在舞台上了。随着不断单击空格键,就是有很多圆出现在舞台上,就像图片3-5一样。我们将整个舞台的像素都拷贝进了bitmap data。
总结draw()方法的参数
draw()方法有一个额外的参数,能够改变源对象的像素,就是合成算法。它允许你指定,将拷贝的像素叠加到目前的bitmap data上的方式。例如,如果你将BlendMode作为draw()的第四个参数。源对象的像素就会叠加到bitmap data的像素上,这个内容我们在前一个章节提到过。一个可能的用途就是创建笔刷,和Photoshop中的一样。这些刷子有混合选项就像层的混合模式一样,像MULTIPLY,这可以应用到你的填充中去。这种功能在ActionScript中调用draw()的时候经常使用,例如复制一个图像笔刷和指定一个特定的混合模式。
clipRect是draw()的第五个可选参数,这个允许你指定源对象的复制区域。如果这里没有指定,就是整体复制。但是如果你想获得更多的控制,你可以制定一个矩形区域作为clipRect参数传递进去。
draw()的最后一个参数是smoothing,这里指定像素源在缩放,旋转或者复制过程中是否平滑,以减少可能出现的锯齿。这可能会使计算变慢,但有时却是必不可少的。
拷贝现有的bitmap数据
结合绘图API一起使用bitmaps
清理