<?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.joa-ebert.com - Blog of Joa Ebert &#187; de.je2050.*</title>
	<atom:link href="http://blog.joa-ebert.com/category/flash/deje2050/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.joa-ebert.com</link>
	<description>Actionscript3, Flash, Scala, Java, C#, C++, Algorithms &#38; Imageprocessing</description>
	<lastBuildDate>Fri, 11 Nov 2011 11:13:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Some updates</title>
		<link>http://blog.joa-ebert.com/2007/02/08/some-updates/</link>
		<comments>http://blog.joa-ebert.com/2007/02/08/some-updates/#comments</comments>
		<pubDate>Thu, 08 Feb 2007 14:52:33 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[imageprocessing]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/2007/02/08/some-updates/</guid>
		<description><![CDATA[I added two the Imageprocessing Library some new blurs. RadialBlur, ZoomBlur and GeometricDisplacedBlur. The GeometricDisplacedBlur is very nice, because you can use any GeometricMap with this filter. I also added a RedEyeRemoval and made some updates to the Color class. Some other filters have been updated as well. I will focus now on some examples [...]]]></description>
			<content:encoded><![CDATA[<p>I added two the <a href="http://blog.je2050.de/imageprocessing-library/" title="Imageprocessing Library" target="_blank">Imageprocessing Library</a> some new blurs. <a href="http://je2050.de/imageprocessing/de/popforge/imageprocessing/filters/distortion/RadialBlur.html" title="RadialBlur">RadialBlur</a>, <a href="http://je2050.de/imageprocessing/de/popforge/imageprocessing/filters/distortion/ZoomBlur.html" title="ZoomBlur" target="_blank">ZoomBlur </a>and <a href="http://je2050.de/imageprocessing/de/popforge/imageprocessing/filters/distortion/GeometricDisplacedBlur.html" title="GeometricDisplacedBlur" target="_blank">GeometricDisplacedBlur</a>. The GeometricDisplacedBlur is very nice, because you can use any <a href="http://je2050.de/imageprocessing/de/popforge/imageprocessing/geom/maps/GeometricMap.html" title="GeometricMap" target="_blank">GeometricMap </a>with this filter.</p>
<p>I also added a <a href="http://je2050.de/imageprocessing/de/popforge/imageprocessing/filters/color/RedEyeRemoval.html" title="RedEyeRemoval" target="_blank">RedEyeRemoval </a>and made some updates to the Color class. Some other filters have been updated as well. I will focus now on some examples and more GeometricMap objects. I am also thinking about filters for HSV color correction and this stuff. But that is not very hard since it is only the <a href="http://je2050.de/imageprocessing/de/popforge/imageprocessing/filters/color/ColorMatrix.html" title="ColorMatrix" target="_blank">ColorMatrix </a>that has to be extended. I am also trying to find good ways for texture synthesis (that will not freeze Flash for 10 seconds).</p>
<p>If someone has any idea for filters that are missing just post it here please.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/02/08/some-updates/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=108&amp;md5=94ded12a3a538e5fd0bf412790c55eac" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/02/08/some-updates/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=108&amp;md5=94ded12a3a538e5fd0bf412790c55eac" type="text/html" />
	</item>
		<item>
		<title>Render, noise and morphological filters</title>
		<link>http://blog.joa-ebert.com/2007/02/02/render-noise-and-morphological-filters/</link>
		<comments>http://blog.joa-ebert.com/2007/02/02/render-noise-and-morphological-filters/#comments</comments>
		<pubDate>Thu, 01 Feb 2007 23:52:50 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[imageprocessing]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=104</guid>
		<description><![CDATA[I had a lot of stuff on my mind the last days (besides the Wiimote). Check the documentation for nice pre-views. Here are the resuts: de.popforge.imageprocessing.filters.* Closing Dilation Erosion Opening Outline TopHat Curves Blobs CellGenerator Corona FractalPlasma MakeTileable Mandelbrot OldschoolPlasma Tile AverageCut MedianCut de.popforge.imageprocessing.geom.* Curve StructuringFunction]]></description>
			<content:encoded><![CDATA[<p><center><img src="http://je2050.de/imageprocessing/filters/Dilation.png" alt="Dilation" border="0" /></center><br />
I had a lot of stuff on my mind the last days (besides the Wiimote). Check the <a href="http://je2050.de/imageprocessing/" target="_blank">documentation</a> for nice pre-views. Here are the resuts:</p>
<p><strong>de.popforge.imageprocessing.filters.*</strong></p>
<ul>
<li>Closing</li>
<li>Dilation</li>
<li>Erosion</li>
<li>Opening</li>
<li>Outline</li>
<li>TopHat</li>
<li>Curves</li>
<li>Blobs</li>
<li>CellGenerator</li>
<li>Corona</li>
<li>FractalPlasma</li>
<li>MakeTileable</li>
<li>Mandelbrot</li>
<li>OldschoolPlasma</li>
<li>Tile</li>
<li>AverageCut</li>
<li>MedianCut</li>
</ul>
<p><strong>de.popforge.imageprocessing.geom.*</strong></p>
<ul>
<li>Curve</li>
<li>StructuringFunction</li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/02/02/render-noise-and-morphological-filters/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=104&amp;md5=84be135aca64285290c40911d4cba5e4" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/02/02/render-noise-and-morphological-filters/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=104&amp;md5=84be135aca64285290c40911d4cba5e4" type="text/html" />
	</item>
		<item>
		<title>Curves</title>
		<link>http://blog.joa-ebert.com/2007/01/28/curves/</link>
		<comments>http://blog.joa-ebert.com/2007/01/28/curves/#comments</comments>
		<pubDate>Sun, 28 Jan 2007 16:38:29 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[imageprocessing]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=101</guid>
		<description><![CDATA[I think that I would sell this if I were an artist. Unfortunately I am not. What you see here is a fractal plasma with applied Curves filter. The UI in this example is of course not tweaked. But you can add and remove points from the curve. Also there are some other options like [...]]]></description>
			<content:encoded><![CDATA[<div><a href="http://je2050.de/blog/wp-content/images/curves.jpg" target="_blank" rel="lightbox[101]"><img src="http://je2050.de/blog/wp-content/images/curves_small.jpg" width="110" height="110" border="0" alt="Curves" style="float: left; padding-right: 3px;"/></a>I think that I would sell this if I were an artist. Unfortunately I am not. What you see here is a fractal plasma with applied Curves filter. The UI in this example is of course not tweaked. But you can add and remove points from the curve. Also there are some other options like changing the interpolation etc.</p>
<p><center><strong><a href="http://je2050.de/showroom.php?file=curves" target="_blank">Let&#8217;s do some serious art!</a></strong></center></p>
<p>It is also nice that I have no lags in the stand-alone player even if I use live mode.
</p></div>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/01/28/curves/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=101&amp;md5=56e7bebbcd38b821d0c781ad5014cc5e" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/01/28/curves/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=101&amp;md5=56e7bebbcd38b821d0c781ad5014cc5e" type="text/html" />
	</item>
		<item>
		<title>Library updates</title>
		<link>http://blog.joa-ebert.com/2007/01/25/library-updates/</link>
		<comments>http://blog.joa-ebert.com/2007/01/25/library-updates/#comments</comments>
		<pubDate>Thu, 25 Jan 2007 13:51:22 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[imageprocessing]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=100</guid>
		<description><![CDATA[Just after the last release I have a couple of updates ready to use. Here is a list of new stuff: QuickNormalMap (thanks to Ralph Hauwert) DisplacementMap GeometricDisplacementMap QuickBumpMap (thanks to Ralph Hauwert) Ripple Spherize Twirl InterpolatedPlasma (thanks to toxie^ainc. and Hopper) SinePlasma (thaks to tocie^ainc. and Hopper) Interpolation (bicubic, bilinear, nearest neighbour) Set of [...]]]></description>
			<content:encoded><![CDATA[<p>Just after the last release I have a couple of updates ready to use. Here is a list of new stuff:</p>
<ul>
<li>QuickNormalMap (thanks to <a href="http://www.unitzeroone.com/" target="_blank">Ralph Hauwert</a>)</li>
<li>DisplacementMap</li>
<li>GeometricDisplacementMap</li>
<li>QuickBumpMap (thanks to <a href="http://www.unitzeroone.com/" target="_blank">Ralph Hauwert</a>)</li>
<li>Ripple</li>
<li>Spherize</li>
<li>Twirl</li>
<li>InterpolatedPlasma (thanks to <a href="http://ainc.de/" target="_blank">toxie^ainc.</a> and <a href="http://squoquo.de/" target="_blank">Hopper</a>)</li>
<li>SinePlasma (thaks to <a href="http://ainc.de/" target="_blank">tocie^ainc.</a> and <a href="http://squoquo.de/" target="_blank">Hopper</a>)</li>
<li>Interpolation (bicubic, bilinear, nearest neighbour)</li>
<li>Set of mathematical described displacement maps (RippleMap, SphereMap, TwirlMap)</li>
</ul>
<p>As you can see it is growing. I am also happy about the nice help I got. There is a lot more to implement since I got the ok to use some rendering filters that theese demo-scene people use to create textures at runtime.</p>
<ul>
<li><a href="http://je2050.de/files/source/as3/ImageProcessing.zip">Download</a></li>
<li><a href="http://je2050.de/imageprocessing/" target="_blank">Documentation</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/01/25/library-updates/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=100&amp;md5=641fda3faa2f678a9f029ac0d2ed4291" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/01/25/library-updates/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=100&amp;md5=641fda3faa2f678a9f029ac0d2ed4291" type="text/html" />
	</item>
		<item>
		<title>New ImageProcessing Library Version</title>
		<link>http://blog.joa-ebert.com/2007/01/21/new-imageprocessing-library-version/</link>
		<comments>http://blog.joa-ebert.com/2007/01/21/new-imageprocessing-library-version/#comments</comments>
		<pubDate>Sun, 21 Jan 2007 19:44:58 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[imageprocessing]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=97</guid>
		<description><![CDATA[There is a new release of the ImageProcessing Library out for you people. I do not have that much time to spend but I hope that this is a helpful library and will even grow a lot. Download Documentation Here is a small changelog: Publish class util to send images in an easy way to [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://je2050.de/blog/wp-content/images/ipsplash.jpg"><br />
There is a new <a href="http://je2050.de/files/source/as3/ImageProcessing.zip">release</a> of the ImageProcessing Library out for you people. I do not have that much time to spend but I hope that this is a helpful library and will even grow a lot.</p>
<ul>
<li><a href="http://je2050.de/files/source/as3/ImageProcessing.zip">Download</a></li>
<li><a href="http://je2050.de/imageprocessing/" target="_blank">Documentation</a></li>
</ul>
<p>Here is a small changelog:</p>
<ul>
<li>Publish class util to send images in an easy way to sockets or websites</li>
<li>Format exporter (PNG, JPEG)</li>
<li>New core class for multiple layers</li>
<li>ToneMapping filter</li>
<li>Noise filters (GaussianNoise, UniformNoise, PerlinNoise)</li>
<li>Drawing util</li>
</ul>
<p>I guess that there are a lot of small changes here and there but nothing special. I also want to implement some more filters later maybe. Right now the next thing I really would like to have is an online playground where you can load pictures from flickr or take snapshots from your webcam, mix them together and save them. The only problem is that this needs some sort of GUI and this is where the problems begin and my timescale shrinks. So you will have to wait for that. I am also looking for contributors. If somebody wants to share his filters or effects just send me an e-mail (address is on <a href="http://je2050.de/">je2050.de</a>).</p>
<p>Here is also a code sample. I will come up with more stuff and update the zip-archive aswell. This little piece of code generates the image you see on top of the post.<br />
[as]var backGround: Image = new Image( 700, 200, ImageFormat.RGB );<br />
var text: Image = new Image( 700, 200, ImageFormat.RGB );<br />
var textGlow: Image;</p>
<p>Drawing.drawText( text, 0xffee3399, 120, 20, &#8216;ImageProcessing Library&#8217;, &#8216;verdana&#8217;, 32, true );</p>
<p>textGlow = text.clone();</p>
<p>new PerlinNoise( 700, 200, 8, 0xABC, false, false, PerlinNoise.CHANNEL_RED | PerlinNoise.CHANNEL_GREEN | PerlinNoise.CHANNEL_BLUE ).apply( backGround );<br />
new Blur( 8, 8, 3 ).apply( textGlow );</p>
<p>var layerManager: LayerManager = LayerManager.fromImage( backGround );</p>
<p>for ( var x: Number = -240; x < layerManager.width; x += layerManager.width / 100 )<br />
Drawing.drawLine( layerManager.backgroundImage, 0&#215;80008888, x, 0, x + 240, 200, true );</p>
<p>for ( var y: Number = -240; y < layerManager.height; y += layerManager.height / 50 )<br />
Drawing.drawLine( layerManager.backgroundImage, 0&#215;80888800, 0, y, 700, y + 240, true );</p>
<p>new GaussianNoise( .16, true ).apply( backGround );</p>
<p>layerManager.addLayer( new Layer( text, 1, BlendMode.ADD ) );<br />
layerManager.addLayer( new Layer( textGlow, 1, BlendMode.ADD, -5, -5 ) );<br />
layerManager.addLayer( new Layer( textGlow, 1, BlendMode.ADD, 5, 5 ) );</p>
<p>var pixelate: Pixelate = new Pixelate( 3 );<br />
pixelate.apply( text );<br />
pixelate.apply( textGlow );</p>
<p>layerManager.merge();<br />
textGlow.dispose();<br />
text.dispose();</p>
<p>layerManager.backgroundImage.updateHistogram();</p>
<p>var histoGram: Image = Image.fromBitmapData( layerManager.backgroundImage.histogram.getBitmapData( 700, 400 ), ImageFormat.RGB );</p>
<p>layerManager.addLayer( new Layer( histoGram, 1, BlendMode.ADD, 0, -200 ) );</p>
<p>layerManager.merge();</p>
<p>histoGram.dispose();</p>
<p>new ContrastCorrection( 1.4 ).apply( layerManager.backgroundImage );<br />
new LevelsCorrection().apply( layerManager.backgroundImage );</p>
<p>addChild( new Bitmap( layerManager.bitmapData ) );[/as]</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/01/21/new-imageprocessing-library-version/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=97&amp;md5=1fe3fca62c55f40b4b7c7cb43e5ebefc" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/01/21/new-imageprocessing-library-version/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=97&amp;md5=1fe3fca62c55f40b4b7c7cb43e5ebefc" type="text/html" />
	</item>
		<item>
		<title>Upcomming Imageprocessing Library Release</title>
		<link>http://blog.joa-ebert.com/2007/01/06/upcomming-imageprocessing-library-release/</link>
		<comments>http://blog.joa-ebert.com/2007/01/06/upcomming-imageprocessing-library-release/#comments</comments>
		<pubDate>Sat, 06 Jan 2007 14:35:03 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[imageprocessing]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=95</guid>
		<description><![CDATA[I am sorry that I do not have much time theese days but I am planning to release a brandnew version of the imageprocessing library. This time I hope some of you already used it and have some ideas about improvements. Here is the plan for the new features: JPEG encoding (complete, using modified version [...]]]></description>
			<content:encoded><![CDATA[<p>I am sorry that I do not have much time theese days but I am planning to release a brandnew version of the imageprocessing library. This time I hope some of you already used it and have some ideas about improvements.</p>
<p>Here is the plan for the new features:</p>
<ul>
<li>JPEG encoding (complete, using modified version of Tinic Uro&#8217;s encoder)</li>
<li>PNG encoding (complete, using modified version of Tinic Uro&#8217;s encoder)</li>
<li>Experiments on very fast mean values (using a Matrix approach orginally comming from Mario Klingemann)</li>
<li>Implementation of a fast interpolated/non-interpolated warp filter (using tesselation technique by André Michelle)</li>
<li>Interpolated levels correction</li>
<li>Simple drawing API (anti-aliased and normal lines complete, text and other primitives missing)</li>
<li>New core class for a layered image (supporting also blend-modes on layers)</li>
<li>Full alpha-channel support</li>
</ul>
<p>As you can see some of the stuff is already complete. Other stuff is missing. The warp filter for instance has never been tested by me before but I have a lot of code here to implement that beast on a fast way. I could also think of two resolutions like I have done it with the sepia filter (QuickSepia and Sepia classes). Beacuse creating a simple warp filter using bilinear interpolation is not that hard. The only problem is, that it will be slow. The other technique uses the Flash drawing API to warp the image (and also for interpolation) but it is not 100% correct.</p>
<p>Another problem is that I lost the batch file for the ASDoc generation. But this is of course a minor issue. Stay tuned!</p>
<ul>
<li><a href="http://je2050.de/imageprocessing/" target="_blank">Documentation</a></li>
<li><a href="http://je2050.de/files/source/as3/ImageProcessing.zip">Get the old version</a></li>
<li><a href="http://blog.je2050.de/?p=81">Read the old post</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/01/06/upcomming-imageprocessing-library-release/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=95&amp;md5=3195e7de9bf6439bd43e08b3ddddbbc7" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/01/06/upcomming-imageprocessing-library-release/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=95&amp;md5=3195e7de9bf6439bd43e08b3ddddbbc7" type="text/html" />
	</item>
		<item>
		<title>ImageProcessing Library (beta)</title>
		<link>http://blog.joa-ebert.com/2006/10/08/imageprocessing-library-beta/</link>
		<comments>http://blog.joa-ebert.com/2006/10/08/imageprocessing-library-beta/#comments</comments>
		<pubDate>Sun, 08 Oct 2006 19:40:18 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[imageprocessing]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=82</guid>
		<description><![CDATA[A first beta release of the imageprocessing library can be downloaded right now. I like to experiment with my webcam and images. This is a fast library with a couple of implemented algorithms. Have a try and tell me what you think about it. ImageProcessing Library ImageProcessing Library Documentation Updates: Added QuickSepia filter which is [...]]]></description>
			<content:encoded><![CDATA[<p>A first beta release of the imageprocessing library can be downloaded right now. I like to experiment with my webcam and images. This is a fast library with a couple of implemented algorithms. Have a try and tell me what you think about it.</p>
<p><a target="_blank" href="http://je2050.de/files/source/as3/ImageProcessing.zip">ImageProcessing Library</a><br />
<a target="_blank" href="http://je2050.de/imageprocessing/">ImageProcessing Library Documentation</a></p>
<p><strong>Updates:</strong></p>
<ul>
<li>Added QuickSepia filter which is using a ColroMatrixFilter instead of YIQ transformations (de.popforge.imageprocessing.filters.color.QuickSepia)</li>
<li>Added Color.add() and Color.substract() for easier blend-mode calculations.</li>
<li>The zip-file contains now the laboratory sources and a batch to compile them.</li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2006/10/08/imageprocessing-library-beta/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=82&amp;md5=252a8a39ce807b407df45151dfb2459f" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2006/10/08/imageprocessing-library-beta/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=82&amp;md5=252a8a39ce807b407df45151dfb2459f" type="text/html" />
	</item>
		<item>
		<title>ImageProcessing library</title>
		<link>http://blog.joa-ebert.com/2006/10/05/imageprocessing-library/</link>
		<comments>http://blog.joa-ebert.com/2006/10/05/imageprocessing-library/#comments</comments>
		<pubDate>Thu, 05 Oct 2006 08:03:36 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[imageprocessing]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=81</guid>
		<description><![CDATA[Got an idea what imageprocessing means? You always wanted to create som eyeToy like game, but it is a struggle to fight against bad lighting? You know that AS3 is fast. So what about some real-time imageprocessing? This is a personal point of interest and I had a lot of fun creating this library. It [...]]]></description>
			<content:encoded><![CDATA[<p><img width="416" height="214" style="float: right; padding-left: 3px" alt="LevelsCorrection" src="http://je2050.de/imageprocessing/filters/LevelsCorrection.png" />Got an idea what imageprocessing means? You always wanted to create som eyeToy like game, but it is a struggle to fight against bad lighting? You know that AS3 is <em>fast</em>. So what about some real-time imageprocessing?</p>
<p>This is a personal point of interest and I had a lot of fun creating this library. It is currently in an early state but it is very difficult to create acceptable results. This library is not very scientific but the output is nearly the same. For some reasons I had to speed up some processes of real imageprocessing. I will continue the fun and add some filters. I do not know from which categorie, maybe morphologic or some more basic binary stuff like Erosion or Dilation (and therefore Closing).</p>
<p>Have a small preview here. I will post either the sources (after having another look) or a compiled SWC. But Flex Builder 2 is some sort of annoying. If I compile the SWC with the compc it works fine until I want to include the SWC into a project. The project also compiles but there is no auto-completion in Flex Builder.</p>
<p><a target="_blank" href="http://je2050.de/imageprocessing/">ImageProcessing Library Documentation</a></p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2006/10/05/imageprocessing-library/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=81&amp;md5=0d936dd7610cd147d4a5afb5b9e68649" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2006/10/05/imageprocessing-library/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=81&amp;md5=0d936dd7610cd147d4a5afb5b9e68649" type="text/html" />
	</item>
		<item>
		<title>AS3 WebCam LevelsCorrection (updated)</title>
		<link>http://blog.joa-ebert.com/2006/05/07/as3-webcam-levelscorrection/</link>
		<comments>http://blog.joa-ebert.com/2006/05/07/as3-webcam-levelscorrection/#comments</comments>
		<pubDate>Sun, 07 May 2006 09:23:04 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=70</guid>
		<description><![CDATA[The imageprocessing-lab yields fruits. What you can see here is automatic levelscorrection applied on a 160&#215;120 image. The fps decrease a little bit because I have to calculate the histogram three times. Two times for the histogram images and one time for the levels filter. So there would be another speed boost if the histograms [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://je2050.de/showroom.php?file=levels"><img width="240" height="180" title="The lab" alt="The lab" style="float: left; padding-right: 3px" src="http://blog.je2050.de/wp-content/img/webcamlevels.jpg" /></a>The imageprocessing-lab yields fruits.  What you can see here is automatic levelscorrection applied on a 160&#215;120 image. The fps decrease a little bit because I have to calculate the histogram three times. Two times for the histogram images and one time for the levels filter. So there would be another speed boost if the histograms are not shown.</p>
<p>My webcam is doing the auto-levels correction already. This is shit, because it is hard to correct corrected levels. And you will not see a big difference. Maybe your webcam is not doing this and you will achieve the grateness of this filter.</p>
<p>After a lot of tests I have got my favorite image format now. It is fast and easy to create new filters. Basically the image consists of an array which holds a BitmapData for each channel. The BrightnessCorrection filter works for example like this:<br />
- Create a look-up table for new brightness values. This is for every channel the same.<br />
- Apply paletteMap to every channel of the image</p>
<p>Easy, huh? And fast. paletteMap is one of the fastest native functions. It is even faster to use BitmapData.paletteMap instead of BitmapData.threshold. The basic function to binarize a picture is done by applying paletteMap with a palette of 0 and 1. This is faster then using threshold!</p>
<p>One last thing. The histogram is way to slow in my eyes. I am still searching for a solution to speed this up. Currently I read the value of each pixel using getPixel. This makes width * height iterations. Then I tested BitmapData.threshold with the == operator. Of course only 256 (non native) iterations but totally 256 * width * height. It was very slow. Another test was using a combination of BitmapData.fillRect and BitmapData.compare. Also slower than reading every pixel.</p>
<p>Maybe another good solution? The comments function is working. I am waiting for your suggestions :-)</p>
<ul>
<li><a target="_blank" href="http://je2050.de/showroom.php?file=levels">Webcam with levels correction</a></li>
</ul>
<p>If you can not see any difference in the two pictures. Try holding your hand in front of the webcam. This will result in very dark input and you see the levels-correction working.</p>
<p><strong>Update:</strong><br />
Compiled using <a target="_blank" href="http://labs.adobe.com/flexproductline/">Flex Builder 2.0 Beta 3</a> which <a target="_blank" href="http://adobe.com/">Adobe</a> released a few hours ago. Now there is a big performance boost in the whole ImageProcessing. I do not really know where it comes from. setPixel seems to be slower than in Beta 2 but since I do not use setPixel at all in the whole package everything is faster. I think that some native functions (also filters) work faster.</p>
<p>The example is doing the following:<br />
- Webcam whith (some sort of) double framebuffer<br />
- Convert BitmapData to Image class with grayscale conversion (using BT709 algorithm)<br />
- Render original Image<br />
- Calculate and draw(!) original histogram<br />
- Apply automatic levels correction<br />
- Apply sharpening<br />
- Render filtered image<br />
- Calculate and draw histogram of new image</p>
<p>This runs at ~20fps for me in the browser. Disabling both unneeded histograms increases fps in standalone player to ~50.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2006/05/07/as3-webcam-levelscorrection/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=70&amp;md5=66a3004be5a3f09eb94da2fe4b5bdecc" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2006/05/07/as3-webcam-levelscorrection/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=70&amp;md5=66a3004be5a3f09eb94da2fe4b5bdecc" type="text/html" />
	</item>
		<item>
		<title>AS3 Imageprocessing library</title>
		<link>http://blog.joa-ebert.com/2006/04/29/as3-imageprocessing-library/</link>
		<comments>http://blog.joa-ebert.com/2006/04/29/as3-imageprocessing-library/#comments</comments>
		<pubDate>Sat, 29 Apr 2006 13:17:27 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=67</guid>
		<description><![CDATA[Continuing with my work on some &#8220;research&#8221; releated to webcam and object recognitionI got a little bit addicted to imageprocessing. You can see some of a lot of working filters here. The latest beauty is the automatic levels correction by stretching the histogram. The auto-levels takes 250ms for a 640&#215;480 px image which is not [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><img width="510" height="447" alt="Various filters" src="http://blog.je2050.de/wp-content/images/filters.jpg" /></div>
<p>Continuing with my work on some &#8220;research&#8221; releated to webcam and object recognitionI got a little bit addicted to imageprocessing. You can see some of a lot of working filters here. The latest beauty is the automatic levels correction by stretching the histogram. The auto-levels takes 250ms for a 640&#215;480 px image which is not bad. Most filters are look-up based.</p>
<p>Thr problem is that I can never decide what seems to be the best and fastest method. An image is of course built from a BitmapData input. First I started with a BitmapData for every color-channel (4 bitmaps for a RGBA image). I am currently using an Array for every channel, because looping through the whole image is faster and I get rid of the get-/setPixel method.</p>
<p>But some new ideas using native methods could speed up everything again. I am not sure, but palletteMap has the potential to make all look-up-table based filters incredible fast. I will give it a try&#8230;tomorrow maybe.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2006/04/29/as3-imageprocessing-library/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=67&amp;md5=5bca81051b5a178799bae2374ebe8b98" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2006/04/29/as3-imageprocessing-library/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=67&amp;md5=5bca81051b5a178799bae2374ebe8b98" type="text/html" />
	</item>
		<item>
		<title>flIRC and Flex 2 Beta2</title>
		<link>http://blog.joa-ebert.com/2006/04/28/flirc-and-flex-2-beta2/</link>
		<comments>http://blog.joa-ebert.com/2006/04/28/flirc-and-flex-2-beta2/#comments</comments>
		<pubDate>Fri, 28 Apr 2006 10:41:32 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=65</guid>
		<description><![CDATA[Updated flIRC to work with Flex 2 Beta 2 again. Enjoy. flIRC]]></description>
			<content:encoded><![CDATA[<p>Updated flIRC to work with Flex 2 Beta 2 again.<br />
Enjoy.</p>
<ul>
<li><a target="_blank" href="http://www.je2050.de/irc/">flIRC</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2006/04/28/flirc-and-flex-2-beta2/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=65&amp;md5=3737c61747c6d8c7540dd215b8797089" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2006/04/28/flirc-and-flex-2-beta2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=65&amp;md5=3737c61747c6d8c7540dd215b8797089" type="text/html" />
	</item>
		<item>
		<title>AS3 Retinex implementation</title>
		<link>http://blog.joa-ebert.com/2006/04/24/as3-retinex-implementation/</link>
		<comments>http://blog.joa-ebert.com/2006/04/24/as3-retinex-implementation/#comments</comments>
		<pubDate>Mon, 24 Apr 2006 09:12:15 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=63</guid>
		<description><![CDATA[Here an implementation of the holy Retinex-filter. The idea behind it is splitting up the digital image into two parts. The luminance and the reflection image. With both parts you can for example increase the brightness without loosing color information. The retinex filter creates images that look more like the reality which is very interesting [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.je2050.de/wp-content/img/retinex.jpg" rel="lightbox[63]"><img width="250" height="118" title="Retinex in action" alt="Retinex in action" style="float: right; padding-left: 3px" src="http://blog.je2050.de/wp-content/img/_retinex.jpg" /></a>Here an implementation of the holy Retinex-filter. The idea behind it is splitting up the digital image into two parts. The luminance and the reflection image. With both parts you can for example increase the brightness without loosing color information. The retinex filter creates images that look more like the reality which is very interesting if you use a camera.</p>
<p>Imagine this in real-time on a webcam. All your problems with the scene appereance would be kicked away since you could level all  images to the same brightness. EyeToy-like games could be played at night without even turning the light on.</p>
<p>This is a conversion from the MSCR (multiscale retinex with color restoration) implementation in gimp-2.3.7.<br />
Have a look at the example picture and <a target="_blank" href="http://je2050.de/highlight.php?file=/files/source/as3/ip/filter/rgb/Retinex.as">/as3/ip/filter/rgb/Retinex.as</a>.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2006/04/24/as3-retinex-implementation/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=63&amp;md5=14700bba6f4588ef621e849907ac4af5" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2006/04/24/as3-retinex-implementation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=63&amp;md5=14700bba6f4588ef621e849907ac4af5" type="text/html" />
	</item>
		<item>
		<title>Simple Auto-Levels</title>
		<link>http://blog.joa-ebert.com/2006/04/24/simple-auto-levels/</link>
		<comments>http://blog.joa-ebert.com/2006/04/24/simple-auto-levels/#comments</comments>
		<pubDate>Mon, 24 Apr 2006 06:37:11 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=61</guid>
		<description><![CDATA[Just a quick note on auto-levels. You may know about that function in various graphics software like Photoshop. There was a simple question about how to implement auto-levels in Flash (especially AS3). Therefore I googled around searching for an algorithm that fits my needs but I had no success. There was also no article in [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick note on auto-levels. You may know about that function in various graphics software like Photoshop. There was a simple question about how to implement auto-levels in Flash (especially AS3).</p>
<p>Therefore I googled around searching for an algorithm that fits my needs but I had no success. There was also no article in my beloved image-processign bible. What I found out is that the levels is about brightness, contrast and midtones. I am just using brightness and contrast here. You can find the whole source in <a target="_blank" href="http://je2050.de/highlight.php?file=/files/source/as3/ip/img/Image.as">/as3/ip/img/Image.as</a> in my file-browser.</p>
<p>Now about the auto-levels with are not as good as the Photoshop results but it is a fast way to do it in Flash.</p>
<p>[as]<br />
//&#8211; create an image<br />
var img: Image = new Image( width, height );<br />
img.setType( Image.IMAGE_GRAY );<br />
img.loadBitmapData( bmp );</p>
<p>//&#8211; grayscale auto-levels<br />
var a: int = img.getAvgValue();<br />
img.adjustBrightness( Math.exp( (0&#215;80 &#8211; a) / 0&#215;80 ) * 0&#215;10 );<br />
img.adjustContrast( Math.exp( (0&#215;80 &#8211; a) / 0&#215;80 ) );<br />
[/as]</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2006/04/24/simple-auto-levels/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=61&amp;md5=3fde59f077a1e7ad68dd38726a83964f" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2006/04/24/simple-auto-levels/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=61&amp;md5=3fde59f077a1e7ad68dd38726a83964f" type="text/html" />
	</item>
		<item>
		<title>Extensible Particle System</title>
		<link>http://blog.joa-ebert.com/2006/01/14/extensible-particle-system/</link>
		<comments>http://blog.joa-ebert.com/2006/01/14/extensible-particle-system/#comments</comments>
		<pubDate>Sat, 14 Jan 2006 12:50:54 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=50</guid>
		<description><![CDATA[I am sorry for that period of absence. I hope that I can manage to write more frequently in the comming next months but I still have to pass my A-levels. There are also some other projects I still have to finish and my new car wants to get ready for the comming summer ;-) [...]]]></description>
			<content:encoded><![CDATA[<p>I am sorry for that period of absence. I hope that I can manage to write more frequently in the comming next months but I still have to pass  my A-levels. There are also some other projects I still have to finish and my new car wants to get ready for the comming summer ;-) I worked the last weeks some time on this piece of Actionscript3. This is not only just another particle-example like all the others. What I wanted to create was an extensible particle system which could create nearly every effect like <a target="_blank" href="http://www.wondertouch.com/">ParticleIllusion</a> does it.<br />
My source of inspiration was <a target="_blank" href="http://www.gamedev.net/reference/articles/article1982.asp">&#8220;Designing an Extensible Particle System using C++ and Templates&#8221;</a> which is an article about extensible particle systems in C++. Since Flash is still not able to handle templates I had to think about other possibilities. An easy way to simulate templates is using interfaces and dataholder classes. But this is also a loss of performance. Not the best solution. A new language that handles templates is <a target="_blank" href="http://www.haxe.org">haXe</a>. All what I can say is that haXe got a lot of very nice things like the templates, enums, etc. but I wanted to create this particle system for AS3 projects. This is one of the reasons why I used AS3 instead of haXe. Another reason is that I really like the Flex2 environment with all the nice code hints and so on.<br />
The particle system is build up on the <em>Policy Pattern</em>. You can read about that in the article I talked about. The policy pattern allows you to combine effects in lots of ways. Most attributes of a particle have their own policy. One for the color, one for the position, for the velocity etc. Theese policies tell the particle how to behave. An easy example is the LifeAction which tells the particle to decrease the life value with a given speed.<br />
The basis of my particle system is of course the smallest unit: a particle. Particles stay inside a ParticleGroup which handles memory management and emits particles at a given position. ParticleGroups can be attached to a ParticleTimeline or a ParticleSystem. A timeline is something that allows you to create a special effect. You are able to create a simple explosion on frame one for example and then show the blast wave after some frames. The nice thing is that you only have to emit this effect once and do not care about any memory management or objects.<br />
Then there are the ParticleSystems which render all particles. A ParticleSystem can use textures or simple pixels. It can be additive (BlendMode.ADD) or whatever you like. Some systems I already created are additive and simple pixel systems. The same for textured systems.<br />
The last thing is about policies. You can create combined policies. For example the ForceFieldAction uses a <a target="_blank" href="http://blog.andre-michelle.com/2005/as3-sweet-lightning-particles/">forcefield</a> to set the velocity. You could combine this policy with the GravityAction which adds gravity to your particle. There are a lof of possibilities. The next thing which has to be done are more policies to allow a huge set of effects and also more ParticleSystems. The timelines also needs the ability to emit particles for a given interval. Physics would also be nice. But the goal is an editor that allows you to create nice effects for easy use.</p>
<p>Some shots:<br />
<img width="80" height="80" src="http://blog.je2050.de/wp-content//images/particle/particle_texturedforce.jpg" /> <img width="80" height="80" src="http://blog.je2050.de/wp-content//images/particle/particle_pixelforce.jpg" /> <img width="80" height="80" src="http://blog.je2050.de/wp-content//images/particle/particle_fireworks.jpg" /> <img width="80" height="80" src="http://blog.je2050.de/wp-content//images/particle/particle_fireworks2.jpg" /> <img width="80" height="80" src="http://blog.je2050.de/wp-content//images/particle/particle_fire.jpg" /></p>
<p>Two examples:</p>
<ul>
<li><a target="_blank" href="http://je2050.de/showroom.php?file=system">Fireworks</a> (Timeline, Textured System)</li>
<li><a target="_blank" href="http://je2050.de/showroom.php?file=system2">&#8220;PerlinForce&#8221;</a> (Additive Pixel System, ForceField based on PerlinNoise)</li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2006/01/14/extensible-particle-system/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=50&amp;md5=b9fbe095fc313340b8e81b559be07467" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2006/01/14/extensible-particle-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=50&amp;md5=b9fbe095fc313340b8e81b559be07467" type="text/html" />
	</item>
		<item>
		<title>Zelda &#8211; Two (tile)worlds in AS3</title>
		<link>http://blog.joa-ebert.com/2005/11/10/zelda-two-tileworlds-in-as3/</link>
		<comments>http://blog.joa-ebert.com/2005/11/10/zelda-two-tileworlds-in-as3/#comments</comments>
		<pubDate>Wed, 09 Nov 2005 22:01:15 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=44</guid>
		<description><![CDATA[This time a pixelscroller in Actionscript3. I hope you know Zelda from the good old SNES. Maybe you do not, but there are two worlds, the light- and the darkworld. As Link you are able to switch between these two worlds using a teleporter. Now what about Flash and two worlds? This is just a [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://je2050.de/work/tiles/"><img width="320" height="240" style="float: right; padding-left: 3px" title="Dark- and lightworld" alt="Dark- and lightworld" src="http://blog.je2050.de/wp-content//images/zelda.jpg" /></a>This time a pixelscroller in Actionscript3.<br />
I hope you know Zelda from the good old SNES. Maybe you do not, but there are two worlds, the light- and the darkworld. As Link you are able to switch between these two worlds using a teleporter.<br />
Now what about Flash and two worlds?<br />
This is just a quick result of a bored evening but you can see what is possible. The world is 2048&#215;2048 px large and has 128&#215;128 tiles with a size of 16&#215;16 px. This makes it easy to imagine what huge chunks of data Flash has to manage and I think the speed is ok. Of course the 640&#215;480 px version could be faster.<br />
I also made a test while working on the tile engine with a Mario-Level. The speed at 640&#215;480 px was ok (!) so with Flash 8.5 you are able to build nice tile engines that run with a high framerate at 640&#215;480 px.<br />
Press your left mouse button to switch between both worlds.</p>
<p>By the way I found an old bug. I am not sure if it really is a bug but this is annoying since Flash5. You have two listeners. One for onKeyDown and one for onKeyUp. Now you have an array of boolean values which shows you if a key is pressed or not. Something like <em>function onKeyDown( event: KeyboardEvent ): Void { isKeyDown[ event.keyCode ] = true; }</em> and the same with false for onKeyUp. Now if you press two keys at the same time and you release one and then the other there won&#8217;t be any event for the second onKeyUp.</p>
<ul>
<li><a target="_blank" href="http://je2050.de/work/tiles/">Zelda Experiment</a></li>
<li><a target="_blank" href="http://www.vgmaps.com/">SNES maps</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2005/11/10/zelda-two-tileworlds-in-as3/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=44&amp;md5=4e4e5aec2015af924ada7bf88edde4ef" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2005/11/10/zelda-two-tileworlds-in-as3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=44&amp;md5=4e4e5aec2015af924ada7bf88edde4ef" type="text/html" />
	</item>
		<item>
		<title>Particles based on Motion</title>
		<link>http://blog.joa-ebert.com/2005/10/31/particles-based-on-motion/</link>
		<comments>http://blog.joa-ebert.com/2005/10/31/particles-based-on-motion/#comments</comments>
		<pubDate>Mon, 31 Oct 2005 12:54:00 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[de.je2050.*]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=42</guid>
		<description><![CDATA[Here an experiment which shows 256 particles on screen. They get actived by the motion of the user (Webcam needed). This experiment does not show the full power of the routine because there are only the particles flying around. You can (and that is the nice thing) calculate and interpolate motion vectors. I did this [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://je2050.de/showroom.php?file=MotionParticles"><img width="320" height="240" style="float: left; padding-right: 3px" src="http://blog.je2050.de/wp-content/images/motionparticles.jpg" /></a> Here an <a target="_blank" href="http://je2050.de/showroom.php?file=MotionParticles">experiment</a> which shows 256 particles on screen. They get actived by the motion of the user (Webcam needed). This experiment does not show the full power of the routine because there are only the particles flying around. You can (and that is the nice thing) calculate and interpolate motion vectors. I did this in Flash8 with a 160&#215;120 px webcam image which has been transformed to 320&#215;240 px and the user was able to punch a ball around.<br />
The routine is not very hard to understand. You have an image of the current webcam and greyscale it. Then you substract the last image, which you stored in a <em>BitmapData</em> from the current. The <em>BlendMode.DIFFERENCE</em> uses the formula <em>newl = abs(old &#8211; new)</em> and is exactly what we need.  When I worked with Aibo&#8217;s camera I used some screen division method. You can also use scanlines which do the job for you. I use another method to get more inaccuracy (yes). I divide the screen in for example 16&#215;16 parts and then I look onyl vor every 2nd pixel for example. This gives good results and keeps the number of total iterations low.<br />
Anyway you know how much motion has been recognized in a given field.<br />
If you want to punch a ball you would look for the best motion you can find around the ball and then look for the last motion. If you use pythagoras you get the distance between theese two points which is an indicator for the strength.<br />
I had to interpolate the points a little bit to get this working with a ball in Flash8. Now have a look at theese nice particles. The performance depends on the number of particles and their size. There are currently 256 particles on screen and they have a size of 8&#215;8 px. All particles get a different color at runtime and they fade using a <em>ColorTransform</em>.  This experiment is very simple if you don&#8217;t think about the particles. It is only some sort this code:</p>
<p>[as]	search.analyze( screen );</p>
<p>var m: Array = search.motion;<br />
var n: int = 0&#215;100;<br />
var x: int;<br />
var y: int;</p>
<p>while ( &#8211;n > -1 )<br />
{<br />
x = n &#038; 0xf;<br />
y = (n &#038; 0xff) >> 4;</p>
<p>if ( m[ x ][ y ] > 0 )<br />
addParticle( x * 20 , y * 15 );<br />
}[/as]</p>
<p>I have to optimize this more and more. The array where the motion gets stored could have only one dimension. But the full 320&#215;240 px webcam gets analyzed. There are 256 particles using blendmodes and colortransforms. If you do this with one ball only you could use a higher detail level for the analyzation.</p>
<ul>
<li><a target="_blank" href="http://je2050.de/showroom.php?file=MotionParticles">Particles based on Motion</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2005/10/31/particles-based-on-motion/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=42&amp;md5=e78f4d8ac64604dd1feefd6f51632e3b" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2005/10/31/particles-based-on-motion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=42&amp;md5=e78f4d8ac64604dd1feefd6f51632e3b" type="text/html" />
	</item>
	</channel>
</rss>

