在创建创建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来随机创建图案,可以用来制作烟雾,云,水波纹等效果。