{"id":352,"date":"2009-07-20T07:45:42","date_gmt":"2009-07-20T14:45:42","guid":{"rendered":"https:\/\/actionsnippet.com\/?p=1803"},"modified":"2009-07-20T07:45:42","modified_gmt":"2009-07-20T14:45:42","slug":"smudge-tool-1","status":"publish","type":"post","link":"https:\/\/actionsnippet.com\/?p=352","title":{"rendered":"Smudge Tool #1"},"content":{"rendered":"<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\n&#x5B;SWF(backgroundColor = 0xCCCCCC)]\r\nvar canvas:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,true, 0xFFFFFFFF);\r\naddChild(new Bitmap(canvas));\r\n\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, onComplete);\r\nfunction onComplete(evt:Event):void{\r\n\tcanvas.draw(loader);\r\n}\r\n\r\nvar brush:Shape = new Shape();\r\nvar diameter:Number = 120;\r\nvar radius:Number = diameter \/ 2;\r\nvar matrix:Matrix = new Matrix();\r\n\r\nvar brushAlpha:BitmapData = new BitmapData(diameter, diameter, true, 0x00000000);\r\ndrawRadial();\r\nbrushAlpha.draw(brush);\r\n\r\nvar xp:Number = 0, yp:Number = 0, px:Number = 0, py:Number = 0;\r\nvar dx:Number, dy:Number;\r\n\r\nstage.addEventListener(MouseEvent.MOUSE_MOVE, onLoop);\r\nfunction onLoop(evt:Event):void {\r\n\txp = mouseX - radius;\r\n\typ = mouseY - radius;\r\n\tdx = xp - px;\r\n\tdy = yp - py;\r\n\tcanvas.copyPixels(canvas,\r\n\t\t\t\t\tnew Rectangle(px, py, diameter, diameter),\r\n\t\t\t\t\tnew Point(xp, yp), brushAlpha, new Point(0,0), true);\r\n\tpx = xp;\r\n\tpy = yp\r\n}\r\n\r\nfunction drawRadial():void{\r\n\tmatrix.createGradientBox(diameter, diameter, 0, 0, 0);\r\n\twith (brush.graphics){\r\n\t\tbeginGradientFill(GradientType.RADIAL, &#x5B;0xFFFFFF, 0xFFFFFF], &#x5B;1,0], &#x5B;0, 255], matrix, SpreadMethod.PAD);\r\n\t\tdrawCircle(radius, radius, radius);\r\n\t}\r\n}\r\n<\/pre>\n<p>This is a quick snippet I wrote while thinking about how to create a smudge tool using BitmapData&#8230; it isn&#8217;t perfect, but it&#8217;s a good first step. It still needs some linear interpolation and I may need to do some pixel pushing to prevent a strange alpha anomaly that causes the brush to get darker than expected&#8230;. <\/p>\n<p><a href=\"http:\/\/www.actionsnippet.com\/swfs\/smudge.html\" target=\"blank\"><br \/>\nHere is the swf&#8230;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/actionsnippet.com\/wp-content\/smudge.jpg\" \/><a\/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#x5B;SWF(backgroundColor = 0xCCCCCC)] var canvas:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,true, 0xFFFFFFFF); addChild(new Bitmap(canvas)); var loader:Loader = new Loader(); loader.load(new URLRequest(&quot;https:\/\/actionsnippet.com\/wp-content\/chair.jpg&quot;)); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); function onComplete(evt:Event):void{ canvas.draw(loader); } var brush:Shape = new Shape(); var diameter:Number = 120; var radius:Number = diameter \/ 2; var matrix:Matrix = new Matrix(); var brushAlpha:BitmapData = new BitmapData(diameter, diameter, true, 0x00000000); drawRadial(); brushAlpha.draw(brush); var [&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],"tags":[3,14,4],"class_list":["post-352","post","type-post","status-publish","format-standard","hentry","category-bitmapdata","tag-actionscript","tag-as3","tag-flash"],"_links":{"self":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/352","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=352"}],"version-history":[{"count":0,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=\/wp\/v2\/posts\/352\/revisions"}],"wp:attachment":[{"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=352"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/actionsnippet.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}