{"id":345,"date":"2009-07-14T14:53:06","date_gmt":"2009-07-14T21:53:06","guid":{"rendered":"https:\/\/actionsnippet.com\/?p=1760"},"modified":"2009-07-14T14:53:06","modified_gmt":"2009-07-14T21:53:06","slug":"cut-image-into-squares-copypixels","status":"publish","type":"post","link":"https:\/\/actionsnippet.com\/?p=345","title":{"rendered":"Cut Image into Squares (copyPixels)"},"content":{"rendered":"<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\n&#x5B;SWF(width=650, height=650)]\r\nvar loader:Loader = new Loader();\r\nloader.load(new URLRequest(&quot;https:\/\/actionsnippet.com\/wp-content\/chair.jpg&quot;));\r\nloader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);\r\n\r\nvar w:Number;\r\nvar h:Number;\r\nvar rows:Number = 20;\r\nvar cols:Number = 20;\r\nvar tiles:Vector.&lt;BitmapData&gt; = new Vector.&lt;BitmapData&gt;();\r\nvar locX:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar locY:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar rX:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar rY:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar sX:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nvar sY:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;();\r\nfunction onLoaded(evt:Event):void{\r\n\tw = evt.target.width;\r\n\th = evt.target.height;\r\n\tvar image:BitmapData = Bitmap(evt.target.content).bitmapData;\r\n\tvar tileWidth:Number = w \/ cols;\r\n\tvar tileHeight:Number = h \/ rows;\r\n\tvar inc:int = 0;\r\n\tvar pnt:Point = new Point();\r\n\tvar rect:Rectangle = new Rectangle(0,0,tileWidth,tileHeight);\r\n\tfor (var i:int = 0; i&lt;rows; i++){\r\n\t\tfor (var j:int = 0; j&lt;cols; j ++){\r\n\t\t\t var currTile:BitmapData= new BitmapData(tileWidth, tileHeight, true, 0x00000000);\r\n\t\t\t rect.x = j * tileWidth;\r\n\t\t\t rect.y = i * tileHeight;\r\n\t\t\t currTile.copyPixels(image, rect, pnt, null, null, true);\r\n\t\t\t tiles&#x5B;inc] = currTile;\r\n\t\t\t rect.x += 25;\r\n\t\t\t rect.y += 25;\r\n\t\t\t sX&#x5B;inc] = rect.x;\r\n\t\t\t sY&#x5B;inc] = rect.y;\r\n\t\t\t locX&#x5B;inc] = rX&#x5B;inc] = -rect.width * 2\r\n\t\t\t locY&#x5B;inc] = rY&#x5B;inc] =  Math.random() * stage.stageHeight;\r\n\t\t\t setTimeout(startAnimation, inc *4 + 100, inc, rect.x, rect.y);\r\n\t\t\t inc++;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction startAnimation(index:int, dx:Number, dy:Number):void{\r\n\tvar interval:Number;\r\n\tvar animate:Function = function(index:int):void{\r\n\t\tlocX&#x5B;index] += (dx - locX&#x5B;index]) \/ 4;\r\n\t\tlocY&#x5B;index] += (dy - locY&#x5B;index]) \/ 4;\r\n\t\tif (Math.abs(locX&#x5B;index] - dx) &lt; 1 &amp;&amp; Math.abs(locY&#x5B;index] - dy)&lt;1){\r\n\t\t\tlocX&#x5B;index] = dx;\r\n\t\t\tlocY&#x5B;index] = dy;\r\n\t\t    clearInterval(interval);\r\n\t\t}\r\n\t}\r\n   interval = setInterval(animate, 32, index);\r\n}\r\n\r\nvar canvas:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false, 0xFFFFFF);\r\naddChild(new Bitmap(canvas));\r\n\r\nvar loc:Point = new Point();\r\naddEventListener(Event.ENTER_FRAME, onLoop);\r\nfunction onLoop(evt:Event):void {\r\n\t  canvas.fillRect(canvas.rect, 0xFFFFFF);\r\n      for (var i:int = 0; i&lt;tiles.length; i++){\r\n\t\t    var tile:BitmapData= tiles&#x5B;i];\r\n\t\t\tloc.x = locX&#x5B;i];\r\n\t\t\tloc.y = locY&#x5B;i];\r\n\t\t    canvas.copyPixels(tile, tile.rect, loc, null, null, true);\r\n\t  }\r\n}\r\n<\/pre>\n<p>This snippet cuts a dynamically loaded image into a series of smaller BitmapData instances. These BitmapData instances are then drawn to a canvas BitmapData using copyPixels. The BitmapData.copyPixels() method is extremely fast &#8211; so this has some  advantages over <a href=\"https:\/\/actionsnippet.com\/?p=1754\">yesterdays post <\/a>(which did basically the same thing with Sprites). I used setInterval and setTimeout to do a simple demo animation, but I recommend using <a href=\"http:\/\/blog.greensock.com\/tweenliteas3\/\">TweenLite<\/a> on a real project.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#x5B;SWF(width=650, height=650)] var loader:Loader = new Loader(); loader.load(new URLRequest(&quot;https:\/\/actionsnippet.com\/wp-content\/chair.jpg&quot;)); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded); var w:Number; var h:Number; var rows:Number = 20; var cols:Number = 20; var tiles:Vector.&lt;BitmapData&gt; = new Vector.&lt;BitmapData&gt;(); var locX:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var locY:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var rX:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var rY:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var sX:Vector.&lt;Number&gt; = new Vector.&lt;Number&gt;(); var sY:Vector.&lt;Number&gt; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,79],"tags":[3,14,4],"class_list":["post-345","post","type-post","status-publish","format-standard","hentry","category-bitmapdata","category-vector","tag-actionscript","tag-as3","tag-flash"],"_links":{"self":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=345"}],"version-history":[{"count":0,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/345\/revisions"}],"wp:attachment":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}