在创建创建BitmapData类的对象时,你很想看到他的样子,由于BitmapData不是DisplayObject类的子类所以不能直接添加对象(所有的addChild()方法添加的都是继承自DisplayObject类的实例)。因而就有了Bitmap类的出现,Bitmap类始终有一个函数作为BitmapData类的实例的容器,即可以这样创建:
var myBitmapData:BitmapData=new BitmapData(100,100,false,0xffffff);
var myBitmap:Bitmap=new Bitmap(myBitmapData);
然后将myBitmap加入显示列表
addChild(myBitmap);
可见后,myBitmap也可以进行缩放,滤镜等操作。
实例如下:
package
{
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.filters.BlurFilter;
public class SprayPaint extends Sprite
{
private var canvas:BitmapData;
private var color:uint;
private var size:Number = 100;
private var density:Number = 100;
public function SprayPaint()
{
init();
}
private function init():void
{
canvas = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x00000000);
var bmp:Bitmap = new Bitmap(canvas);
/*bmp.filters = [new BlurFilter(2, 2, 3)];*/
addChild(bmp);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
}
private function mouseDownHandler(event:MouseEvent):void
{
color = Math.random() * 0xffffff + 0xff000000;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function mouseUpHandler(event:MouseEvent):void
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void
{
for(var i:int = 0; i < density; i++)
{
var angle:Number = Math.random() * Math.PI * 2;
var radius:Number = Math.random() * size;
var xpos:Number = mouseX + Math.cos(angle) * radius;
var ypos:Number = mouseY + Math.sin(angle) * radius;
canvas.setPixel32(xpos, ypos, color);
}
}
}
}
由于位图类与像素有关,当然除了设置像素之外,BitmapData类还有徐多用途。可以复制像素设置它的阈值,分解,合并,滚动等,还可以利用perlinenoise来随机创建图案,可以用来制作烟雾,云,水波纹等效果。