ノイズやらパーリンノイズなどいろいろあるけどとりあえずノイズを作成してみた。


主に必要なクラス

 import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;


ノイズはBitmapDataのnoiseメソッドで作成する。その引数は・・・


bitmapData.noise(ランダム整数, カラー成分の最小値,カラー成分の最大値, 使用するカラーチャンネル, グレースケールにするかどうか);


おもに必要なのは、ランダム整数と使用するカラーチャンネルとクレースケールにするかどうか


ランダム整数の求め方


var rSeed:Number=Math.floor(Math.random()*0xFFFFFF);


もしくは


var rSeed:Number=new Data().getTimer(); //短いのでこっちのほうがいいかも?


でランダムな数値を作成することができる


使用するカラーチャンネルの求め方


var chs:uint= BitmapDataChannel.RED | BitmapDataChannel.BLUE | BitmapDataChannel.GREEN;


//半透明を使用する場合

chs= chs | BitmapDataChannel.ALPHA;


グレースケールにするかどうかは、「true」「false」で指定すればいいだけ。


あと第2引数と第3引数はよく分からんがとりあえず「0」と「255」を指定すればいいのかな。


最小値は[0~255] 最大値も同じく[0~255]までの数値。



package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.events.*;
/**
* ...
* @author $(DefaultUser)
*/
public class NoizeBitmap extends Bitmap{
private var isGray:Boolean;
private var chs:uint;
//
public function NoizeBitmap(w:uint,h:uint,isGray:Boolean=false) {
bitmapData = new BitmapData(w, h);
this.isGray = isGray;
//ノイズで使用するチャンネル
chs = BitmapDataChannel.RED | BitmapDataChannel.BLUE | BitmapDataChannel.GREEN;
//半透明を使用する
chs = BitmapDataChannel.ALPHA;
//
addEventListener(Event.ENTER_FRAME, onenter);
}

private function onenter(e:Event):void {
var rSeed:Number = new Date().getTime();
bitmapData.noise(rSeed, 0, 255, chs, isGray);
}

}

}



メインのタイムライン


//ビットマップシンボルからビットマップを作成する
var photoBmd:Myphoto=new Myphoto(0,0);
var photo:Bitmap=new Bitmap(photoBmd);
addChild(photo);
photo.x=20;
photo.y=20;
//

//リンケージから作成した画像の大きさと同じノイズを作成する
var noizeBmd:NoizeBitmap=new NoizeBitmap(photo.width,photo.height); 
//
noizeBmd.x=photo.x;
noizeBmd.y=photo.y;
addChild(noizeBmd);