﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.mattiasnorell.com &#187; Flash</title>
	<atom:link href="http://blog.mattiasnorell.com/category/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mattiasnorell.com</link>
	<description>Otukt i otakt</description>
	<lastBuildDate>Tue, 07 Feb 2012 22:58:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Dots &#8211; Enkelt iPhonespel byggt i Flash CS5</title>
		<link>http://blog.mattiasnorell.com/2010/11/08/dots-enkelt-iphonespel-byggt-i-flash-cs5/</link>
		<comments>http://blog.mattiasnorell.com/2010/11/08/dots-enkelt-iphonespel-byggt-i-flash-cs5/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 22:41:04 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Lab]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1593</guid>
		<description><![CDATA[Dots är en sån där sak som bara blir. Det började med lite slökodning som går vidare i en &#8221;det ska jag testa&#8221;-tanke som, i detta fall, slutade med i &#8221;det här borde fungera bra på en iPhone&#8221;. Det ligger &#8230; <a href="http://blog.mattiasnorell.com/2010/11/08/dots-enkelt-iphonespel-byggt-i-flash-cs5/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<iframe src='http://player.vimeo.com/video/16634730?title=1&amp;byline=1&amp;portrait=1' width='640' height='480' frameborder='0'></iframe>
<p>Dots är en sån där sak som bara blir. Det började med lite slökodning som går vidare i en &#8221;det ska jag testa&#8221;-tanke som, i detta fall, slutade med i &#8221;det här borde fungera bra på en iPhone&#8221;.</p>
<p>Det ligger inte speciellt mycket arbeta bakom Dots. Några timmar på sin höjd. Den största delen av arbetet låg egentligen inte i att koda själva spelet utan att komma fram till hur jag ville göra. Koden i sig är inget speciellt. Det är egentligen bara ett antal Event.ENTER_FRAME, några MouseEvent.CLICK och lite saker som håller ordning på poäng, liv samt level.</p>
<p>Med tanke på hur Dots växte fram är det inte heller särskilt optimerat, vilket märks speciellt i &#8221;Game over&#8221;-sekvensen. Några av de saker jag dock tänkt på är att använda så få vektorobjekt som möjligt, att rensa upp objekt som inte används och att sätta cacheAsBitmap och cacheAsBitmapMatrix på så mycket av grafiken som möjligt. Dots innehåller trots allt otroliga mängder grafik. Hur som helst, ett litet tidfördriv med andra ord.</p>
<p>Som en jämförelse finns en &#8221;webbvariant&#8221; av <a rel="shadowbox;height=480;width=320;" href="http://blog.mattiasnorell.com/wp-content/uploads/2010/11/Dot2.swf">Dots att spela här</a>. Dom svarta prickarna ska man klicka på, dom röda ska man låta passera. Så går det till.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/11/08/dots-enkelt-iphonespel-byggt-i-flash-cs5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Inverted Mask &#8211; The latest and greatest. A sneak peek.</title>
		<link>http://blog.mattiasnorell.com/2010/11/02/inverted-mask-the-latest-and-greatest-a-sneak-peek/</link>
		<comments>http://blog.mattiasnorell.com/2010/11/02/inverted-mask-the-latest-and-greatest-a-sneak-peek/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 23:36:40 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[inverted mask]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1536</guid>
		<description><![CDATA[Ok, the latest and greatest might be pushing it a bit. But I needed to update my inverted mask AS3-lib so that it supported animated masks, moving backgrounds et cetera. The code isn´t really ready for prime time use quite &#8230; <a href="http://blog.mattiasnorell.com/2010/11/02/inverted-mask-the-latest-and-greatest-a-sneak-peek/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ok, the latest and greatest might be pushing it a bit. But I needed to update my inverted mask AS3-lib so that it supported animated masks, moving backgrounds et cetera. The code isn´t really ready for prime time use quite yet but this is a little demo of the new and improved inverted mask-class. The demo below use your webcam as one source and a jpeg as the second one. To swap between the inverted and normal mask, click anywhere inside the swf.</p>
<p>Maby not so fun fact. The picture, depicting the Brighton pier, was shot during Flash on the beach´10.</p>
<p>
<object width="640" height="480">
<param name="movie" value="http://blog.mattiasnorell.com/wp-content/uploads/2010/11/InvertedWebcam.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="640" height="480" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/11/InvertedWebcam.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/11/02/inverted-mask-the-latest-and-greatest-a-sneak-peek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hur känns det att HTML5 kommer ta ditt jobb?</title>
		<link>http://blog.mattiasnorell.com/2010/10/26/hur-kanns-det-att-html5-kommer-ta-ditt-jobb/</link>
		<comments>http://blog.mattiasnorell.com/2010/10/26/hur-kanns-det-att-html5-kommer-ta-ditt-jobb/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 17:37:54 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1474</guid>
		<description><![CDATA[Efter som jag jobbar som flashutvecklare får jag ofta frågan ”Hur känns det att jobba med något som kommer försvinna?”. Även om jag vet vad de syftar på frågar jag ofta vad de menar. ”Ja men du vet, HTML5 kommer &#8230; <a href="http://blog.mattiasnorell.com/2010/10/26/hur-kanns-det-att-html5-kommer-ta-ditt-jobb/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Efter som jag jobbar som flashutvecklare får jag ofta frågan ”Hur känns det att jobba med något som kommer försvinna?”. Även om jag vet vad de syftar på frågar jag ofta vad de menar. ”Ja men du vet, HTML5 kommer ju nu.” Här brukar jag välja att svar på tre olika sätt beroende på vem som frågar.</p>
<p>Ett: Småskratta och säga att den dag HTML5 faktiskt går att använda så kanske det kommer hända.<br />
Två: Ifrågasätta deras kunskap om både HTML5 och Flash följt av en kapning vid fotknölarna<br />
Tre: Den långa varianten där jag lägger fram varför jag tycker som jag gör.</p>
<p>Och det är den jag tänker köra nu.</p>
<p>För det första, HTML5 är bra. Jag tycker det är en grymt spännande plattform och HTML kan göra saker som Flash inte ens borde försöka sig på. De som försöker och framförallt tror att de kan bygga informationssiter i Flash borde skämmas, bli av med jobbet, alternativt säga upp sig, för att gå om Webbkunskap A.</p>
<p>Problemet jag ser med HTML5 är att det förlitar sig för mycket på ett antikt kodspråk, JavaScript. Det är både långsamt och omständligt att arbeta med. För att HTML5 skall bli en allvarlig utmanare till Flash måste vi ha en ny, snabbare version av JavaScript. Bara att kunna typa variabler vore ett stort steg framåt.</p>
<p>Nu ska jag inte bara sitta här och säga att HTML5 och framförallt JavaScript är långsamt. Webbläsare som Google Chrome börjar få sina JavaScript-motorer att prestera riktigt bra, det är egentligen bara en tidsfråga innan vi kan producera grafik och funktionsintensiva applikationer med HTML5. Men i nuläget är det och faktumet att många sitter på gamla webbläsare (Ja, jag tittar på dig IE6) ett problem.</p>
<h2>”Men Flash fungerar ju inte på iPhone/iPad/iWhatever?”</h2>
<p>Nej, det gör det inte, men då ska man inte heller glömma att det är väldigt få som faktiskt äger och använder en sådan enhet om man jämför med hur många som inte gör det. Att döma ut en teknik enbart på grund av en enhet är väldigt trångsynt och framförallt korkat. Om man vänder på steken går Flash, och då främst Air-applikationer, att köra i datorer, mobiltelefoner, TV-apparater, BluRay-spelare och en mängd tablet-pc’s. Även om den stora marknaden just nu är mobilapplikationer kommer inte detta vara för evigt. Inom en inte allt för avlägsen framtid kommer det handla om applikationer som fungerar över en mängd enheter, oavsett om det är en mobiltelefon, en tv eller en hemdator. Mindre utvecklingstid, större spridning. Ingen förlorar på detta, förutom de företag som låser in utvecklare i sina avtal om hur applikationer får utvecklas och distribueras.</p>
<p>Sedan måste man skilja äpplen och päron. Jag tycker att det mesta av webben faktiskt passar bäst i HTML. Många av de appar som går att ladda ner i Apples AppStore skulle fungera minst lika bra som webbappar och det är här HTML5, CSS3 och JavaScript kommer in i bilden igen. Det går att göra väldigt mycket med HTML5, speciellt om de får ordning på standarden för video- och audio-taggarna. Men det är ungefär här som användningsområdet för HTML5 slutar. Vill vi som utvecklare och kreatörer bygga något som innefattar 3D, ge besökaren större möjligheter till interaktivitet, ljud genererade i realtid eller möjlighet att manipulera bilder, video och ljud så räcker helt enkelt inte HTML till, oavsett version. Gör vi en version av Flashsiten för datorer är det enkelt att känna av om samma site körs på en Android-mobil eller en tablet-pc och där efter anpassa gränssnitten för varje enhet. Det fungerar lite på samma sätt som HTML5 kan välja olika CSS-filer beroende på skärmstorlek och media men med Air kan vi bygga program som inte bara kan hårdvaruaccelereras utan även installeras på väldigt många enheter.</p>
<h2>Men&#8230; Du pratar bara teknik. Jag pratar ju om ditt jobb!</h2>
<p>Jag vet. Och det är lite det jag menar. Jag känner inte att mitt jobb är hotat enbart på grund av HTML5. Jag bryr mig egentligen inte om i vilket språk jag bygger saker och ting. Jag vill bygga saker som de vi idag gör i Flash. Om det visar sig att HTML5 är det bättre alternativet om fem år kommer jag gladeligen byta. Så över tid tror jag absolut att HTML5 kommer döda Flash som webbformat. Men jag tror att den dagen det händer har Flash fått fäste på andra plattformar och på så sätt kommer det inte påverka oss som utvecklare speciellt mycket. Vi kommer fortsätta bygga Flash och angående webben har vi vid det laget lärt oss att göra samma saker vi gör i dag, fast med andra verktyg.</p>
<p>Så, för att sammanfatta, jag tror inte HTML5 kommer döda Flash, där emot bör vi utvecklare inte utesluta HTML5 helt och hållet, för mycket intressant kommer hända på den fronten. Även om det har en väg kvar att gå.</p>
<p>Det är det långa svaret jag brukar ge, tyvärr brukar jag inte alltid hinna till slutet innan den jag pratar med avbryter med &#8221;jaja, jag förstår, du gillar Flash&#8221;. Och ja, jag gillar Flash, men jag gillar att jobba med webben mer. Tekniken jag gör det med är sekundär.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/10/26/hur-kanns-det-att-html5-kommer-ta-ditt-jobb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>stage.stageHeight return the wrong value by 100 pixels</title>
		<link>http://blog.mattiasnorell.com/2010/10/13/stage-stageheight-return-the-wrong-value-by-100-pixels/</link>
		<comments>http://blog.mattiasnorell.com/2010/10/13/stage-stageheight-return-the-wrong-value-by-100-pixels/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 09:01:28 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[stage.stageHeight]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1429</guid>
		<description><![CDATA[I found a rather wierd bug in the Flash CS4 IDE today. When I traced the height of the stage Flash returned the value minus 100 pixels. My stageheight was 288 but Flash told me it was 188. Strange. Very &#8230; <a href="http://blog.mattiasnorell.com/2010/10/13/stage-stageheight-return-the-wrong-value-by-100-pixels/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I found a rather wierd bug in the Flash CS4 IDE today. When I traced the height of the stage Flash returned the value minus 100 pixels. My stageheight was 288 but Flash told me it was 188. Strange. Very strange indeed.</p>
<p>The thing (and the solution in my case) was that I had the Bandwidth profiler open. Once I closed the profiler Flash returned the correct value. I tried the same thing on a few other FLA:s with the same result so I guess it&#8217;s a bug in the IDE. And I hope it&#8217;s gone in CS5.</p>

<a href='http://blog.mattiasnorell.com/wp-content/uploads/2010/10/flash_bandwidthprofiler_bug_1.jpg' rel='shadowbox[sbalbum-1429];player=img;' title='flash_bandwidthprofiler_bug_1'><img width="150" height="150" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/10/flash_bandwidthprofiler_bug_1-150x150.jpg" class="attachment-thumbnail" alt="flash_bandwidthprofiler_bug_1" title="flash_bandwidthprofiler_bug_1" /></a>
<a href='http://blog.mattiasnorell.com/wp-content/uploads/2010/10/flash_bandwidthprofiler_bug_2.jpg' rel='shadowbox[sbalbum-1429];player=img;' title='flash_bandwidthprofiler_bug_2'><img width="150" height="150" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/10/flash_bandwidthprofiler_bug_2-150x150.jpg" class="attachment-thumbnail" alt="flash_bandwidthprofiler_bug_2" title="flash_bandwidthprofiler_bug_2" /></a>

]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/10/13/stage-stageheight-return-the-wrong-value-by-100-pixels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>goSquare – Geolocation iPhone app gjord i Flash CS5</title>
		<link>http://blog.mattiasnorell.com/2010/09/24/gosquare-geolocation-iphone-app-gjord-i-flash-cs5/</link>
		<comments>http://blog.mattiasnorell.com/2010/09/24/gosquare-geolocation-iphone-app-gjord-i-flash-cs5/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 13:41:04 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[goSquare]]></category>
		<category><![CDATA[packager for iphone]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1347</guid>
		<description><![CDATA[goSquare är, som ni kanske listat ut, en rippoff / parodi på GoWalla och FourSquare. I all enkelthet fungerar det så att den utnyttjar iPhonens GPS för att skicka koordinater till en databas. Dessa koordinater skickas även en sväng genom &#8230; <a href="http://blog.mattiasnorell.com/2010/09/24/gosquare-geolocation-iphone-app-gjord-i-flash-cs5/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<iframe src='http://player.vimeo.com/video/15251194?title=1&amp;byline=1&amp;portrait=1' width='640' height='400' frameborder='0'></iframe>
<p>goSquare är, som ni kanske listat ut, en rippoff / parodi på GoWalla och FourSquare. I all enkelthet fungerar det så att den utnyttjar iPhonens GPS för att skicka koordinater till en databas. Dessa koordinater skickas även en sväng genom Google Maps API för att hämta ut den adress man befinner sig på. Detta returneras som ett JSON-objekt. Den insamlade datan presenterar jag sedan <a href="http://blog.mattiasnorell.com/gosquare/" target="_blank">här</a> i en enkel flashfil byggd med Google Maps API:n.</p>
<p>Från början var det tänk att bygga in Google Maps kartor i appen men tyvärr tillåter inte iPhonen att man laddar in den swc som innehåller API:n, men det löser sig nog när man fått pilla lite mer. Detta är trots allt ett experiment.</p>
<p>Hur som helst, ett första försiktigt steg in i världen av appar kodade med AS3.</p>
<p>Tack för mig.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/09/24/gosquare-geolocation-iphone-app-gjord-i-flash-cs5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PixelBenderBooth</title>
		<link>http://blog.mattiasnorell.com/2010/09/15/pixelbenderbooth/</link>
		<comments>http://blog.mattiasnorell.com/2010/09/15/pixelbenderbooth/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 13:28:33 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[pixelbender]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1209</guid>
		<description><![CDATA[Even thou I think PixelBender is a really good idea I&#8217;ve never actually tried it. One day i thought to my self &#8221;Hey, that PhotoBooth thing Apple ship with their computers cant be that hard to replicate&#8221;. And an hour &#8230; <a href="http://blog.mattiasnorell.com/2010/09/15/pixelbenderbooth/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Even thou I think PixelBender is a really good idea I&#8217;ve never actually tried it. One day i thought to my self &#8221;Hey, that PhotoBooth thing Apple ship with their computers cant be that hard to replicate&#8221;. And an hour or two later PixelBenderBooth was born. Press &#8221;space&#8221; to remove effects and you need a webcam.</p>
<p>I &#8221;borrowed&#8221; the PixelBender kernels from <a href="http://www.adobe.com/cfusion/exchange/index.cfm?event=productHome&amp;exc=26&amp;loc=en_us" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.adobe.com/cfusion/exchange/index.cfm?event=productHome_amp_exc=26_amp_loc=en_us&amp;referer=');">PixelBender Exchange</a> over at Adobe.com.</p>
<p><span id="more-1209"></span></p>
<p>
<object width="640" height="480">
<param name="movie" value="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/FlashBooth.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="640" height="480" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/FlashBooth.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<h2>Sample code</h2>
<p>If you want to try it out for yourself you can copy my sample code below and use it with your own kernels. I wrote this thing in FDT 4 so if you use the Flash IDE you need to change a few things, like [SWF(width=640,height=480,frameRate=30)].</p>
<h3>PhotoBooth.as</h3>
<pre class="brush: actionscript3; font-size: 50%">package {
    import flash.events.MouseEvent;
    import flash.events.KeyboardEvent;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.media.Camera;
    import flash.media.Video;
    import flash.events.Event;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.text.TextField;

    [SWF(width=640,height=480,frameRate=30)]

    public class FlashBooth extends MovieClip {
        public var camfeed : Video = new Video(640, 480);
        private var camFrameRate : int = 15;
        private var camWidth : int = 640;
        private var camHeight : int = 480;
        private var cam : Camera;
        private var cameraBitmap : BitmapData;
        private var bmp : Bitmap;

       // Location of the kernels.
        private var siteUrl:String = "";
        private var filterHolder : Sprite = new Sprite();
        private var pbFilters : Array = [siteUrl+"zoomBlur.pbj", siteUrl+"SmartNormalMap.pbj", siteUrl+"RippleBlocks.pbj"];

        public function FlashBooth():void {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e : Event = null):void {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            removeEventListener(Event.ADDED_TO_STAGE, init);

            // We start by settings up the camera
            cam = Camera.getCamera();

            // If no camera is found...
            if (!cam) {
                // ...we tell the user that is the case...
                var camError : TextField = new TextField();
                camError.text = "I search'd the internetz and haz not found camera. I haz no luck. *sigh*";
                addChild(camError);
            } else {
                // ...or we move on to set the height, width and framerate.
                cam.setMode(camWidth, camHeight, camFrameRate);

                // Then we tell the video-object to use the camera as its source.
                camfeed.attachCamera(cam);

                // Set the bitmap to match the size of the video.
                cameraBitmap = new BitmapData(camfeed.width, camfeed.height);

                bmp = new Bitmap(cameraBitmap);
                bmp.x = 0;
                bmp.y = 0;
                addChild(bmp);

                // Load all the filters in the pbFilters-array thru a for-loop.
                // All settings are defined in the FilterClass.as as get/setters.
                for(var i : uint = 0;i &lt; pbFilters.length;++i) {
                    var f : FilterClass = new FilterClass();
                    f.url = pbFilters[i];
                    f.source = camfeed;
                    f.framerate = camFrameRate;
                    f.start();
                    f.x = (80 * i) + 10;
                    f.y = 10;

                    // Since we want the "big" picture to use the filter loaded
                    // in the class we tell our swf to listen for when the user
                    // click on the previewimage generated within the filterclass.
                    f.addEventListener(MouseEvent.CLICK, addFilter)
                    filterHolder.addChild(f);
                }

                // Some positioning and graphics stuff.
                filterHolder.x = (stage.stageWidth - filterHolder.width) / 2;
                filterHolder.y = stage.stageHeight - (filterHolder.height + 30);

                filterHolder.graphics.beginFill(0x000000, .5);
                filterHolder.graphics.drawRoundRect(0, 0, filterHolder.width + 20, filterHolder.height + 20, 10);
                filterHolder.graphics.endFill();
                addChild(filterHolder);

                // Set up a listener since we want to remove the filter when the
                // user press the spacebar.
                stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardInput);

                 // Update the big picture everytime a frame is loaded.
                stage.addEventListener(Event.ENTER_FRAME, updateViewport);
            }
        }

        private function addFilter(e : MouseEvent):void {
            // Fetch the filter from within the filterclass.
            bmp.filters = [e.currentTarget.getFilter()];
        }

        private function updateViewport(e : Event):void {
            // Update the big picture.
            cameraBitmap.lock();
            cameraBitmap.draw(camfeed);
            cameraBitmap.unlock();
        }

        private function keyboardInput(e : KeyboardEvent):void {
            // Detect what key the user pressed and if it is the
            // spacebar (keycode 32) remove the filter.
            if(e.keyCode == 32) {
                bmp.filters = [];
            }
        }
    }
}</pre>
<h3>FilterClass.as</h3>
<pre class="brush: actionscript3; font-size: 50%">package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.net.URLRequest;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.display.Shader;
    import flash.filters.ShaderFilter;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.media.Video;
    import flash.utils.Timer;

    public class FilterClass extends Sprite {
        private var shader : Shader;
        private var shaderFilter : ShaderFilter;
        private var filterBmp : Bitmap;
        private var filterBmpData : BitmapData;
        private var frameRateTimer : Timer;

        // Get and set-vars
        private var _camFeed : Video;
        private var _filterUrl : String;
        private var _frameRate : int;

        public function FilterClass() {
            // We set useHandCursor and buttonMode to true since we want the
            // class to act as a button.
            this.useHandCursor = true;
            this.buttonMode = true;
        }

        public function start():void {

            // We start to load the PixelBender kernel.
            var urlRequest : URLRequest = new URLRequest(_filterUrl);
            var urlLoader : URLLoader = new URLLoader();

            // We need to sett the LoaderDataFormat to binary since the kernel
            // is a compiled file.
            urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            urlLoader.addEventListener(Event.COMPLETE, applyFilter);
            urlLoader.load(urlRequest);

            // Set up the bitmap that will act as the preview.
            filterBmpData = new BitmapData(640, 480);
            filterBmp = new Bitmap(filterBmpData);
            filterBmp.width = 64;
            filterBmp.height = 48;
            addChild(filterBmp);
        }

        private function applyFilter(e : Event):void {
            // Always remove listeners you have no use for.
            e.currentTarget.removeEventListener(Event.COMPLETE, applyFilter);

            // Tell the Flash Player that we want to use the loaded data
            // as a filter.
            shader = new Shader(URLLoader(e.target).data);
            shaderFilter = new ShaderFilter(shader);

            // Since we want the to act as a button with graphics updated in
            // realtime we need to set the filters-parameter to the shaderFilter.
            filterBmp.filters = [shaderFilter];

            // We could use Event.ENTER_FRAME, but since we want to control the
            // framerate we use a timer so that the preview bitmap will update
            // when we want and not everytime a new frame is loaded.
            frameRateTimer = new Timer(1000 / _frameRate);
            frameRateTimer.addEventListener(TimerEvent.TIMER, update);
            frameRateTimer.start();
        }

        private function update(e : TimerEvent = null):void {
            // We lock the bitmapdata before we draw and then unlock it.
            // Performance my friends, performance.
            filterBmpData.lock();
            filterBmpData.draw(_camFeed);
            filterBmpData.unlock();
        }

        public function getFilter():ShaderFilter{
            // With this function we can pass the filter to objects outside the class.
            return shaderFilter;
        }

        /* GETTERS AND SETTERS */
        public function set source(val : Video):void {
            _camFeed = val;
        }

        public function set url(val : String):void {
            _filterUrl = val;
        }

        public function set framerate(val : int):void {
            _frameRate = val;
        }
    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/09/15/pixelbenderbooth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playing around with Math.sin() and flash.media.camera</title>
		<link>http://blog.mattiasnorell.com/2010/09/10/playing-around-with-math-sin-and-flash-media-camera/</link>
		<comments>http://blog.mattiasnorell.com/2010/09/10/playing-around-with-math-sin-and-flash-media-camera/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 22:21:19 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Lab]]></category>
		<category><![CDATA[Utveckling]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[webcam]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=1177</guid>
		<description><![CDATA[I started out by playing with some mathstuff like this, took a detur through flash.media.Camera and ended up with a fusion of the two. And you need a webcam. Main.as package { import flash.display.Sprite; import flash.events.Event; import net.hires.debug.Stats; import flash.display.BitmapData; &#8230; <a href="http://blog.mattiasnorell.com/2010/09/10/playing-around-with-math-sin-and-flash-media-camera/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I started out by playing with some mathstuff like <a href="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/sine-rotate.swf" rel="shadowbox[sbpost-1177];width=640;height=385;">this</a>, took a detur through <a href="http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/media/Camera.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/media/Camera.html?referer=');">flash.media.Camera</a> and ended up with a fusion of the two. And you need a webcam.</p>
<p><span id="more-1177"></span></p>
<p>
<object width="640" height="400">
<param name="movie" value="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/Main1.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="640" height="400" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/09/Main1.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<h2>Main.as</h2>
<pre class="brush: actionscript3; font-size: 50%">package {
	import flash.display.Sprite;
	import flash.events.Event;
	import net.hires.debug.Stats;
	import flash.display.BitmapData;
	import flash.display.Bitmap;
	import flash.media.Camera;
	import flash.media.Video;

	[SWF(width=640,height=400,frameRate=30)]

	public class Main extends Sprite {
		private var holder : Sprite = new Sprite();
		private var childCound : uint = 240;
		private var a : Number = 0;
		private var wcfeed : Video = new Video(80, 60);
		private var wc : Camera;
		private var wcbmp : BitmapData;

		public function Main():void {
			if (stage)
				init();
			else
				addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e : Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);

			this.graphics.beginFill(0x666666);
			this.graphics.drawRoundRect(0, 0, stage.stageWidth, stage.stageHeight,15);
			this.graphics.beginFill(0xcccccc);
			this.graphics.drawRoundRect(10, 10, stage.stageWidth - 20, stage.stageHeight - 20,10);
			this.graphics.endFill();

			wc = Camera.getCamera();
			wc.setMode(80, 60, 15);
			wcfeed.attachCamera(wc);
			wcbmp = new BitmapData(wcfeed.width, wcfeed.height);

			for (var i : uint = 0; i &lt; childCound;++i) {
				var dot : Dot = new Dot();
				dot.x = (stage.stageWidth - dot.width) / 2;
				dot.y = (stage.stageHeight - dot.height) / 2;
				holder.addChild(dot);
			}

			addChild(holder);

			var bmp : Bitmap = new Bitmap(wcbmp);
			bmp.x = (stage.stageWidth - wcfeed.width) / 2;
			bmp.y = stage.stageHeight - (wcfeed.height + 20);
			addChild(bmp);

			var stat : Stats = new Stats();
			stat.x = 20;
			stat.y = 20;
			addChild(stat);

			stage.addEventListener(Event.ENTER_FRAME, move);
		}

		private function move(e : Event):void {
			wcbmp.draw(wcfeed);

			for (var i : uint = 0; i &lt; childCound;++i) {
				var dot : Dot = holder.getChildAt(i) as Dot;
				var l : Number = i &amp; 15;
				var t : Number = Math.floor(i / 16);
				var colorX : Number = (l / 16) * 80;
				var colorY : Number = (t / 15) * 60;
				dot.changeColor(wcbmp.getPixel(colorX, colorY));

				dot.x = dot.width * (l + 8.5 + Math.sin(a + t * .3));
				dot.y = dot.height * (t + 3 + Math.sin(270 + a + l * .3));
			}
			a -= .05;
		}
	}
}</pre>
<h2>Dot.as</h2>
<pre class="brush: actionscript3; font-size: 50%">package
{
	import flash.display.Sprite;
	public class Dot extends Sprite
	{
		public function Dot(){}
		public function changeColor(color:uint):void{
			graphics.clear();
			graphics.beginFill(color, 1);
			graphics.drawCircle(0, 0, 10);
			graphics.endFill();
		}
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/09/10/playing-around-with-math-sin-and-flash-media-camera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash on the beach</title>
		<link>http://blog.mattiasnorell.com/2010/08/16/flash-on-the-beach/</link>
		<comments>http://blog.mattiasnorell.com/2010/08/16/flash-on-the-beach/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 19:38:56 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Air]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Two]]></category>
		<category><![CDATA[#nöjd]]></category>
		<category><![CDATA[flash on the beach]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=930</guid>
		<description><![CDATA[I flera år har jag velat åka. I år åker jag. Ni som vet vad &#8221;Flash on the beach&#8221; är vet att jag  inte behöver skriva en lång text för att förklara hur nöjd jag är över det. Det här &#8230; <a href="http://blog.mattiasnorell.com/2010/08/16/flash-on-the-beach/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://static.mattiasnorell.com/blog/2010/08/fotb.jpg" rel="shadowbox[sbpost-930];player=img;" onclick="pageTracker._trackPageview('/outgoing/static.mattiasnorell.com/blog/2010/08/fotb.jpg?referer=');"><img class="alignnone size-full wp-image-931" title="Flash on the beach - Confirmation email" src="http://static.mattiasnorell.com/blog/2010/08/fotb.jpg" alt="" width="640" height="347" /></a></p>
<p>I flera år har jag velat åka. I år åker jag. Ni som vet vad &#8221;Flash on the beach&#8221; är vet att jag  inte behöver skriva en lång text för att förklara hur nöjd jag är över det. Det här kommer bli grymt. Grymt!</p>
<p>Grymt!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/08/16/flash-on-the-beach/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trevlig sommar fackböcker</title>
		<link>http://blog.mattiasnorell.com/2010/07/12/trevlig-sommar-fackbocker/</link>
		<comments>http://blog.mattiasnorell.com/2010/07/12/trevlig-sommar-fackbocker/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 11:01:01 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Mattias en person]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=771</guid>
		<description><![CDATA[Då mitt intag av det tryckta ordet det senaste halvår har bestått av fackliteratur, och då främst böckerna ovan, tänker jag i sommar inte läsa en rad som kan göra mig mer allmänbildad, utbildad eller på något sätt utvecklad. Jag &#8230; <a href="http://blog.mattiasnorell.com/2010/07/12/trevlig-sommar-fackbocker/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.mattiasnorell.com/wp-content/uploads/2010/07/booksaspnetcsharpactionscript.jpg" rel="shadowbox[sbpost-771];player=img;"><img class="alignright size-full wp-image-772" title="Books" src="http://blog.mattiasnorell.com/wp-content/uploads/2010/07/booksaspnetcsharpactionscript.jpg" alt="" width="640" height="480" /></a></p>
<p>Då mitt intag av det tryckta ordet det senaste halvår har bestått av fackliteratur, och då främst böckerna ovan, tänker jag i sommar inte läsa en rad som kan göra mig mer allmänbildad, utbildad eller på något sätt utvecklad. Jag skall läsa påhittade saker. Historier som inte behöver följa någon syntax. Berättelser som inte slutar med en kompilering. Saker med fantasi som inte framställs genom kod. I sommar tänkte jag sätta i mig slutet på John Ajvide Lindqvists &#8221;Pappersväggar&#8221; och &#8221;Lilla stjärna&#8221;. En gång för alla läsa klart &#8221;Aldrig fucka upp&#8221;. Göra upp med &#8221;Processen&#8221;. Och någon stans på vägen byta en av pelarna på farstukvisten.<em> </em></p>
<p>Trevlig sommar på er fackböcker, vi ses i höst.<em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/07/12/trevlig-sommar-fackbocker/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Open a jQuery LightBox from Flash</title>
		<link>http://blog.mattiasnorell.com/2010/05/07/open-a-jquery-lightbox-from-flash/</link>
		<comments>http://blog.mattiasnorell.com/2010/05/07/open-a-jquery-lightbox-from-flash/#comments</comments>
		<pubDate>Fri, 07 May 2010 12:39:45 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[In english]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[lightbox]]></category>

		<guid isPermaLink="false">http://blog.mattiasnorell.com/?p=562</guid>
		<description><![CDATA[The idea behind this plugin is to let Flash call a jQuery-function that will open up a LightBox. Nothing fancy, just a lightbox. But before we begin I have two things to say: 1. This is a work in progress. &#8230; <a href="http://blog.mattiasnorell.com/2010/05/07/open-a-jquery-lightbox-from-flash/">Läs mer <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The idea behind this plugin is to let Flash call a jQuery-function that will open up a LightBox. Nothing fancy, just a lightbox. But before we begin I have two things to say:</p>
<p>1. This is a work in progress. As of now it only lets you display one image, no text or navigation and so on. I plan to rewrite most of the plugin sometime in the future to make it more like &#8221;the real lightbox&#8221;.</p>
<p>2. This jQuery plugin was inspired and based on jQuery lightBox by Leandro Vieira Pinho  &#8211; <a href="http://leandrovieira.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/leandrovieira.com?referer=');">http://leandrovieira.com</a>. In other words, I stole pretty much everything and rewrote some of the code.</p>
<p>Demo can be found <a href="http://dev.mattiasnorell.com/examples/as3lightbox/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/dev.mattiasnorell.com/examples/as3lightbox/?referer=');">here</a>.<br />
And a developmentversion of the plugin <a href="http://dev.mattiasnorell.com/as3lightbox/js/jquery.flashlightbox-0.1.js" target="_blank" onclick="pageTracker._trackPageview('/outgoing/dev.mattiasnorell.com/as3lightbox/js/jquery.flashlightbox-0.1.js?referer=');">here</a>. (You need to copy/paste right now, sorry.)<br />
﻿﻿<br />
Include the following in your html-file:<br />
ALWAYS add &#8221;id&#8221; as an attribute in your embedcode if you want IE7 to do what you want.</p>
<pre class="brush: js; font-size: 50%">&lt;link rel="stylesheet" type="text/css" href="JavaScript/flashlightbox/jquery.lightbox-0.5.css" media="screen" /&gt;
&lt;script type="text/javascript" src="JavaScript/flashlightbox/jquery.flashlightbox-0.1.js"&gt;&lt;/script&gt;
<script src="js/swfobject.js" type="text/javascript"><!--mce:0--></script>
&lt;script type="text/javascript"&gt;

$(document).ready(function() {
$('body').append('&lt;div id="flashLightbox"&gt;&lt;/div&gt;');
});

function flashLightbox(val) {
$('#flashLightbox').flashLightBox({
image: val,
imageLoading:'lightbox-ico-loading.gif',
imageBlank:'lightbox-blank.gif'});
}

&lt;/script&gt;

<script type="text/javascript"><!--mce:1--></script>
</pre>
<p>The code for the demoswf (I use FlashDevelop, FlexSDK 3.5 and Flash Player 9):</p>
<pre class="brush: actionscript3; font-size: 50%">package
{

// Import stuff
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.IOErrorEvent;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.external.ExternalInterface;
import flash.events.IOErrorEvent;
import flash.display.Loader;
import flash.net.URLLoader;
import flash.net.URLRequest;

/**
* ...
* @author Mano
*/

public class Main extends Sprite
{

// Setup vars used later on
private var imgUrl:String;
private var imgLoader:Loader = new Loader;

public function Main():void
{

// It's hammertime!
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void
{
// Always remove eventlisteners you dont use
removeEventListener(Event.ADDED_TO_STAGE, init);

//
stage.align=StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

// Set the var image Url.
if (this.loaderInfo.parameters.imgUrl) {
imgUrl = this.loaderInfo.parameters.imgUrl;
}else {
imgUrl = '2648636603_c65d0ecc9c_b.jpg';
}

// Load the image
imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete,false,0,true);
imgLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onError,false,0,true);

var request:URLRequest = new URLRequest(imgUrl);
imgLoader.load(request);
}

private function zoom(e:MouseEvent):void {
// If the swf is allowed to use ExternalInterface we call the javascript-function 'flashLightbox'.
// Remeber to always test ExternalInterface on a server and not localy.
if (ExternalInterface.available) {
ExternalInterface.call("flashLightbox", imgUrl);
}else {
trace("ExternalInterface not available");
}
}

private function onComplete(e:Event):void {
/*
Next we resize the image so that we can load a huge image, which we probably will since we want to zoom it and it might not fit.
We create a bitmap and load the loadercontent into the bitmap.
*/

var image:Bitmap = Bitmap(imgLoader.content);
var imageHeigth:int = 200;

var newWidth:int = image.width/image.height * imageHeigth;
image.height = imageHeigth;
image.width = newWidth;
image.smoothing = true;

imgLoader.unload();

/*
* Since we are going to add a MouseEvent we need to create a holder in which we place the bitmap
* because bitmaps are not InteractiveObjects and don't have a clue how to fire events.
*/

var holder:Sprite = new Sprite();

// Some graphic mumbojumbo.
holder.graphics.beginFill(0xcccccc, 1);
holder.graphics.drawRoundRect(0, 0, image.width+40, image.height+40, 20);
holder.graphics.endFill();

// Add eventlistener
holder.addEventListener(MouseEvent.CLICK, zoom);

image.x = 20;
image.y = 20;

holder.addChild(image);

// Position the sprite in the center of the stage
holder.x = (stage.stageWidth - holder.width) / 2;
holder.y = (stage.stageHeight - holder.height) / 2;

addChild(holder);

trace('Image loaded. URL: ' + imgUrl);
}

private function onError(e:IOErrorEvent):void {
trace('Image not found. URL: ' + imgUrl);
}

}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.mattiasnorell.com/2010/05/07/open-a-jquery-lightbox-from-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

