Bitmap 类是用来包装 BitmapData 的, BitmapData 中具备了各种位图操作的功能,但是不能直接用于显示,因此,需要以它为参数,实例化一个 Bitmap 用于显示。
BitmapData 中比较强的是位图复制、像素读取、像素写的功能。利用这些功能,可以做一个基于位图操作的画板,橡皮擦功能就比较更容易实现了,将橡皮的位图复制到画板中,即可“擦去”不需要的内容。
充溢填充也是一个很有用的功能,在填色游戏中,利用它,可以减少设置多个元件的工作,以前我做过的几个填色示例都是用基于 colorTransform 的,在草线图中,指出多个元件是相当的麻烦,有了充溢填充,就简单了很多,只要画好草线图,就可以直接应用填色效果了。
包含多种画笔、选色、撤消、恢复功能的画板,应该是什么模式呢?我想工厂模式或许是比较适合的,在点击了不同的按钮之后,生成不同的画笔,用来画出不同的东西,每各画笔中有可能还包含了状态模式。至于恢复、撤消是个例外,可以单独考虑。不同的画笔之间应该遵循相同的颜色设置接口,这样,进行选色后,可以直接对画笔进行刷新,而不需要去考虑现在用的是哪只画笔。
画板功能在课件中用的比较多,回头再仔细整理一下。
下面的代码,先在 Sprite 对象中画了一个矢量图格式的五角星,接着将这个图形画到了位图中去。
import ascb.drawing.Pen;
var spr:Sprite=new Sprite();
addChild(spr);
var pen:Pen=new Pen(spr.graphics);
spr.graphics.lineStyle(1);
pen.beginFill(0x00ff00);
pen.drawStar( 50,50,5,19, 50,0 );
spr.x = 200;
var bitmap:BitmapData=new BitmapData(100,100,false,0xffff0000);
bitmap.draw(spr);
var image:Bitmap=new Bitmap(bitmap);
addChild(image);
效果如下: