木曜日, 4月 02, 2009

actionscript3でglitchする

glitchlena
参考にしたのはこのforum。
Processing 1.0 - glitch art

ヘッダになっているであろう位置をとばして適当な位置のデータを置き換える。
ヘッダの位置予想は適当。ヘッダがあれば、何でもできる。
バイナリのいじり方はflash oopを参考にした。

本当はhex editorみたいに全部展開してちゃんと狙ってglitchさせたいけど、イベント処理が重く分割させる必要がある。これもflash oopにイベントを分割してドラゴン曲線を描くライブラリの作り方が書かれているので参考にするつもり。


package {
import flash.display.Sprite;
import flash.display.Loader;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.net.URLStream;
import flash.utils.ByteArray;

public class LoadBinaryURLStream extends Sprite {
private var stream :URLStream;
private var request:URLRequest;
private var data:ByteArray;
private var loader:Loader;
public function LoadBinaryURLStream(){
data = new ByteArray();
request = new URLRequest("img/pic.jpg");
loader = new Loader();
addChild(loader);

stream = new URLStream();
stream.addEventListener(Event.COMPLETE, onComplete);
stream.addEventListener(ProgressEvent.PROGRESS, onProgress);

stream.load(request);
}

private function onComplete(e:Event):void {
loader.loadBytes(data);
}

private function onProgress(e:ProgressEvent):void {
stream.readBytes(data, data.length);
if(data.length > 1024) {
data.position = Math.floor(Math.random()*data.length)-1;
if(data.position<1024) {
data.position += 1024;
}
data.writeByte(0);
}
}
}
}