forked from: グロさを追求しきれなかったPerlinNoise
とりあえず、左右対称にしてみた。
// forked from Hiiragi's グロさを追求しきれなかったPerlinNoise
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.ConvolutionFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
/**
* グロさを追求しきれなかったPerlinNoise
*
* @author Hiiragi
*
* 一応警告出してますが、大したことはないです。
*
* BitmapData.perlinNoiseの引数にfractalっていうのがあるんですが、それをfalseにしておくとキモい感じのノイズになるので、なんか内蔵っぽくならないかなと思ったらあんまりうまくいかなかったという。
*
* 誰かforkでグロくしてくれる人を募集。
*
*
*/
[SWF(width = "465", height = "465", frameRate = "30", background = "0x0")]
public class Organ extends Sprite
{
private var _perlinNoiseBmpd:BitmapData;
private var _bmp:BitmapData;
private var _cf:ConvolutionFilter;
private var _warningText:TextField;
public function Organ()
{
if (stage) init();
else this.addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_perlinNoiseBmpd = new BitmapData(this.stage.stageWidth/2+1, this.stage.stageHeight, false);
_bmp = new BitmapData(this.stage.stageWidth, this.stage.stageHeight, false);
this.addChild(new Bitmap(_bmp));
var mtxArray:Array = [0, 0, 0, 0, 0,
0, -1, -1, 0, 0,
0, -1, 1, 1, 0,
0, 0, 1, 1, 0,
0, 0, 0, 0, 0];
_cf = new ConvolutionFilter(5, 5, mtxArray)
_warningText = new TextField();
_warningText.autoSize = TextFieldAutoSize.LEFT;
_warningText.text = "一応、閲覧注意(Clickで描画)";
_warningText.setTextFormat(new TextFormat(null, 25));
_warningText.x = this.stage.stageWidth / 2 - _warningText.width / 2;
_warningText.y = this.stage.stageHeight / 2 - _warningText.height / 2;
this.addChild(_warningText);
this.stage.addEventListener(MouseEvent.CLICK, onClickHandler);
}
private function onClickHandler(e:MouseEvent):void
{
if (_warningText.visible) _warningText.visible = false;
_bmp.lock();
_perlinNoiseBmpd.perlinNoise(_perlinNoiseBmpd.width * 4, _perlinNoiseBmpd.height * 2, 6, Math.random() * int.MAX_VALUE, true, false, 7, true);
_bmp.draw( _perlinNoiseBmpd );
_bmp.draw( _perlinNoiseBmpd, new Matrix( -1,0,0,1,_bmp.width,0 ) );
_bmp.colorTransform(_bmp.rect, new ColorTransform(5, 2, 2, 10, 10, 10));
_bmp.applyFilter(_bmp, _bmp.rect, new Point(), _cf);
_bmp.unlock();
}
}
}