package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageQuality; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLRequest; import flash.utils.ByteArray; import flash.utils.getTimer; import flash.text.TextField; import flash.text.TextFormat; [SWF(width="640",height="516",frameRate="1000",backgroundColor="#ffffff")] public class starry extends Sprite { private var outputBitmapData : BitmapData; private var outputBitmap : Bitmap; private var outputBitmapData2 : BitmapData; private var outputBitmap2 : Bitmap; private var pictLdr:Loader = new Loader(); private var img:Array = []; private var puntos:Array = []; private var puntos2:Array = []; private var xx1:Array = []; private var angu:Array = []; private var angus:Array = []; private var anguc:Array = []; private var yy2:Array = []; private var a:Array = []; private var b:Array = []; private var n7:Array = []; private var lin:int = 0, c0:int = 0, press:int = 0, ang:Number = 0, key:int = 0, cont:int = 0; private var textfield : TextField; public function starry() { stage.align = StageAlign.TOP_LEFT; stage.quality = StageQuality.LOW; stage.scaleMode = StageScaleMode.NO_SCALE; outputBitmapData2 = new BitmapData(640, 516, false); outputBitmap2 = new Bitmap(outputBitmapData2); addChild(outputBitmap2); outputBitmapData = new BitmapData(640, 516, true); outputBitmap = new Bitmap(outputBitmapData); addChild(outputBitmap); textfield = new TextField(); textfield.defaultTextFormat = new TextFormat("_sans"); textfield.text = "loading (176 kb)"; textfield.autoSize = "left"; textfield.x = 6; addChild(textfield); var pictURL:String = "starry-night.jpg"; var pictURLReq:URLRequest = new URLRequest(pictURL); pictLdr.load(pictURLReq); pictLdr.contentLoaderInfo.addEventListener(Event.INIT, onInit); } public function onInit(evt:Event):void { var x:int, y:int, n:int=0; var k:BitmapData = Bitmap(pictLdr.content).bitmapData; removeChild(textfield); for (y = 0; y < 516; y++) { for (x = 0; x < 640; x++) { yy2[n] = 0; img[n++] = k.getPixel(x, y); outputBitmapData.setPixel32(x, y, 0); outputBitmapData2.setPixel(x, y, k.getPixel(x, y)); } } stage.addEventListener(MouseEvent.MOUSE_DOWN, md); stage.addEventListener(MouseEvent.MOUSE_UP, mu); addEventListener(Event.ENTER_FRAME, update); } public function md(e:MouseEvent):void { key = 1; } public function mu(e:MouseEvent):void { key = 0; } public function mouse():void { var yi:int, yf:int, x2:int, y2:int, x:int, y:int, pos:int; var xn:int, yn:int; x = mouseX; y = mouseY; if (x<5) x=5; if (x>=640-5) x=640-6; if (y<5) y=5; if (y>=516-5) y=516-6; if (key) { if (press&&(puntos[lin]<8191)) { var auxx:int, auxy:int; auxx=xx1[cont-1]%640; auxy =int(xx1[cont-1] / 640); if (!((auxx>=x-2)&&(auxx<=x+2)&&(auxy>=y-2)&&(auxy<=y+2))) { var n:int, ax2:int, ay2:int; var dx:Number, dy:Number, ax:Number, ay:Number, mod:Number, xnr:int, ynr:int, ang2:Number, ang3:Number; dx=x-auxx; dy=y-auxy; if (dx==0) dx=0.00001; if (dy==0) dy=0.00001; mod=Math.sqrt(dx*dx+dy*dy)*2; dx=dx/mod; dy=dy/mod; ang2=Math.acos(dx*2); if (dy<0) ang2=(2*3.1416)-ang2; if (puntos[lin]==1) { ang=ang2; angu[cont-1]=ang2; } ax=auxx+dx; ay=auxy+dy; if ((ang2-ang)>3.1415) ang+=6.28; else if ((ang2-ang)<-3.1415) ang2+=6.28; for (n=0; n=-1)&&(xnr<=1)) { pos=(ay2+(int(yn)))*640+(ax2+(int(xn))); yy2[pos]=ynr+5+(puntos[lin]<<4)+(lin<<18); } } } } ax+=dx; ay+=dy; puntos[lin]++; n7[lin]++; cont++; } if (ang2>(3.141592*2)) ang2=ang2-(3.141592*2); ang=ang2; } } else { lin++; n7[lin] = (cont<<14)+1; xx1[cont] = x + y * 640; for (yn = 0; yn <= 10; yn++) { angus[(cont<<4)+yn] = (yn-5)*640+xx1[cont]; } angu[cont] = 0; puntos[lin] = 1; cont++; ang=0; press=1; } } else { press=0; } } public function update(e:Event):void { var x:int, y:int, n:int=0, T:int; var A:uint, d:int; var k:int, k2:int, ln:int, k3:int; T = (2000000000 - getTimer()) / 20; outputBitmapData.lock(); for (y = 0; y < 516; y++) { for (x = 0; x < 640; x++) { k2 = yy2[n]; ln = k2 >> 18; if (ln) { k3 = n7[ln]; k = (k3>>14) + ((((k2>>4)&0x3fff)+T)%(k3&0x3fff)); d = (k2&0xf)-5; A = 0xff000000-(d * d * 150994944); outputBitmapData.setPixel32(x, y, A|img[angus[(k<<4)+d+5]]); } n++; } } outputBitmapData.unlock(); mouse(); } } }