<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>RTFM / Daniel Gasienica</title>
	
	<link>http://gasi.ch/blog</link>
	<description>Thoughts on Flash, Flex &amp; Computer Science.</description>
	<lastBuildDate>Wed, 09 Dec 2009 07:24:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/gasi/rtfm" /><feedburner:info uri="gasi/rtfm" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Joining Microsoft</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/sQki1WLuXgU/</link>
		<comments>http://gasi.ch/blog/joining-microsoft/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 17:58:50 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[bellevue]]></category>
		<category><![CDATA[internship]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[livelabs]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[redmond]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[seadragon]]></category>
		<category><![CDATA[seattle]]></category>
		<category><![CDATA[usa]]></category>
		<category><![CDATA[zooming]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=1386</guid>
		<description><![CDATA[I am thrilled to announce that I&#8217;ll be joining the Seadragon team at Microsoft Live Labs as a research intern. Ever since I first watched Blaise Agüera y Arcas present Seadragon &#38; Photosynth at TED, I knew the Seadragon team was at the cutting edge of changing the way we will interact with vast amounts [...]]]></description>
			<content:encoded><![CDATA[<p>I am thrilled to announce that I&#8217;ll be joining the <a href="http://livelabs.com/seadragon">Seadragon team</a> at <a href="http://livelabs.com">Microsoft Live Labs</a> as a <em>research intern</em>. Ever since I first watched <a href="http://www.ted.com/index.php/talks/blaise_aguera_y_arcas_demos_photosynth.html">Blaise Agüera y Arcas present Seadragon &amp; Photosynth</a> at <a href="http://ted.com">TED</a>, I knew the Seadragon team was at the cutting edge of changing the way we will interact with vast amounts of visual information in the future.</p>
<p><a href="http://livelabs.com/seadragon/" title="Seadragon"><img src="http://farm3.static.flickr.com/2617/3898566366_c287c95d04_o.png" width="500" height="320" alt="Seadragon" /></a></p>
<p>Getting the chance to be a part of this group of extremely visionary &amp; talented people is a feeling I cannot describe. I am looking forward to finally meet some of the people I&#8217;ve had contact with over the last months in person, among them <a href="http://twitter.com/iangilman">Ian</a>, <a href="http://www.mit.edu/~akishore">Aseem</a>, <a href="http://twitter.com/benvanik">Ben</a>, <a href="http://twitter.com/mr_yuk">Kevin</a>, <a href="http://blogs.msdn.com/lutzg/">Lutz</a>, <a href="http://www.linkedin.com/in/jdarpinian">James</a>, <a href="http://twitter.com/billcrow/">Bill</a>, <a href="http://twitter.com/jaysenior">Jay</a>, and all those I haven&#8217;t got to know so far.<br />
They are the brilliant minds behind products &amp; projects such as <a href="http://livelabs.com/seadragon/silverlight/">Silverlight Deep Zoom</a>, <a href="http://livelabs.com/seadragon-ajax/">Seadragon AJAX</a>, <a href="http://livelabs.com/seadragon-mobile/">Seadragon Mobile</a>, <a href="http://seadragon.com/">Seadragon.com</a>, <a href="http://photosynth.net">Photosynth</a>, <a href="http://en.wikipedia.org/wiki/JPEG_XR"><strike>WMP</strike> <strike>HD Photo</strike> JPEG XR</a>, <a href="http://infinitecanvas.appjet.net/">Infinite Canvas</a>, <a href="http://gimmeshiny.com/">Gimme Shiny!</a> and <a href="http://code.google.com/p/pspplayer/">PSP Player</a>.</p>
<p>Personally I see working at Microsoft as a great opportunity to work on <a href="http://gasi.ch/blog/zoomable-user-interfaces">all</a> <a href="http://gasi.ch/blog/tandem">the</a> <a href="http://openzoom.org">things</a> <a href="http://gasi.ch/blog/openzoom-description-format">I&#8217;m</a> <a href="http://tandem.gasi.ch/">passionate</a> <a href="http://gasi.ch/blog/gigapan-mobile">about</a> and potentially reach millions of people around the world.</p>
<p>Stay tuned as I&#8217;ll share my stories about settling down in the <a href="http://maps.google.com/maps?f=q&#038;source=s_q&#038;hl=en&#038;geocode=&#038;q=seattle+area&#038;sll=47.64839,-122.122822&#038;sspn=0.104427,0.2635&#038;ie=UTF8&#038;z=11&#038;iwloc=A">Seattle area</a> and hopefully a bit about the stuff I&#8217;ll be working on!</p>
<p>Yours,<br />
Daniel</p>
<h3>P.S. OpenZoom</h3>
<p class="footnote">As of next week active development of the <a href="http://gasi.ch/blog/openzoom-sdk">OpenZoom SDK</a> on my part will be put on hold for the duration of my internship. I consider the features and components already included (<a href="http://openzoom.org/sdk/download/latest/zip">0.4.2.1 release</a>) fairly stable and as many people have shown it&#8217;s very well suited to be used in real-world projects. Apart from that, I&#8217;ll still try my best to answer questions and help out on the <a href="http://openzoom.org/go/community">OpenZoom community</a> whenever possible.</p>
<p class="footnote">I&#8217;d like to point that I made sure that the status of the <a href="http://openzoom.org">OpenZoom</a> project itself is not in any way affected by this announcement. It&#8217;s still open source and free. Actually, I&#8217;d like to encourage other people to <a href="http://github.com/openzoom/sdk">fork it</a> and continue where I left off.</p>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/sQki1WLuXgU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/joining-microsoft/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/joining-microsoft/</feedburner:origLink></item>
		<item>
		<title>OpenZoom SDK</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/mqdhu_c49Vo/</link>
		<comments>http://gasi.ch/blog/openzoom-sdk/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 01:24:20 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[tandem]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[deepzoom]]></category>
		<category><![CDATA[flashplayer]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[multiscaleimage]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[Zoomable User Interface]]></category>
		<category><![CDATA[zoomify]]></category>
		<category><![CDATA[zooming]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=1287</guid>
		<description><![CDATA[After many months of hard, fun, frustrating &#38; rewarding work, I am happy to announce the first public release of the OpenZoom SDK.
What Is the OpenZoom SDK?
The OpenZoom SDK is a free &#38; open source toolkit for delivering high-resolution images and Zoomable User Interfaces (ZUIs) to the web and desktop. It is built on top [...]]]></description>
			<content:encoded><![CDATA[<p>After many months of hard, fun, frustrating &amp; rewarding work, I am happy to announce the first public release of the <strong>OpenZoom SDK</strong>.</p>
<h2>What Is the OpenZoom SDK?</h2>
<p>The <strong>OpenZoom SDK</strong> is a <em>free &amp; open source toolkit</em> for delivering <em>high-resolution images</em> and <em>Zoomable User Interfaces (ZUIs)</em> to the web and desktop. It is built on top of the <a href="http://www.adobe.com/flashplatform/">Adobe Flash Platform</a> which means you can use it in Flash, Flex, ActionScript &amp; AIR projects equally well.</p>
<h2>Showcase</h2>
<blockquote class="info">
<h2>Gigapixel Photography</h2>
<p><a href="http://gigapixelphotography.com" title="Gigapixel Photography Powered By OpenZoom"><img style="border: 2px solid #CCC;" src="http://farm3.static.flickr.com/2460/3828368948_3729196555.jpg" width="500" height="300" alt="Gigapixel Photography Powered By OpenZoom" /></a><br />
<a href="http://gigapixelphotography.com/">GigapixelPhotography.com</a> &mdash; Dugg almost 5000 times on <a href="http://digg.com/arts_culture/Extreme_Gigapixel_Photo_Look_into_everyone_s_apartment">digg.com</a>.</p>
<p class="footnote">Copyright 2009, <a href="http://gigapixelphotography.com/">Gigapixel Photography</a></p>
</blockquote>
<blockquote class="info">
<h2>Alba Water</h2>
<p><a href="http://www.albawater.com.vn" title="Alba Water Powered By OpenZoom"><img style="border: 2px solid #CCC;" src="http://farm3.static.flickr.com/2480/3828349350_532a27d90a.jpg" width="500" height="300" alt="Alba Water Powered By OpenZoom" /></a><br />
<a href="http://albawater.com.vn/">AlbaWater.com.vn</a> &mdash; Stunning microsite for Alba Water.</p>
<p class="footnote">Copyright 2009, <a href="http://albawater.com.vn/">Alba Water</a></p>
</blockquote>
<blockquote class="info">
<h2>Is This Your Luggage?</h2>
<p><a href="http://gasi.ch/blog/openzoom-is-this-your-luggage/" title="Is This Your Luggage? Powered By OpenZoom"><img style="border: 2px solid #CCC;" src="http://farm4.static.flickr.com/3594/3474363339_fafdee1f23.jpg" width="500" height="347" alt="Is This Your Luggage? Powered By OpenZoom" /></a><br />
Remix of the famous <a href="http://isthisyourluggage.com/">IsThisYourLuggage.com</a>. Powered by OpenZoom.</p>
<p class="footnote">Copyright 2009, <a href="http://isthisyourluggage.com/">IsThisYourLuggage.com</a></p>
</blockquote>
<h2>Development</h2>
<p>While the development of the <strong>OpenZoom SDK</strong> originally started in <a href="http://subversion.tigris.org/">Subversion</a> on <a href="http://open-zoom.googlecode.com/">Google Code</a><sup><a href="#cite-1">1</a></sup>, I have meanwhile successfully and happily migrated it to <a href="http://git-scm.com/">Git</a> and <a href="http://github.com/openzoom/sdk">GitHub</a>.</p>
<p>Having the <strong>OpenZoom SDK</strong> hosted on <a href="http://github.com/openzoom/sdk">GitHub</a> means you can <a href="http://github.com/openzoom/sdk">browse the history</a>, <a href="http://github.com/openzoom/sdk/fork">fork the project</a>, <a href="http://github.com/openzoom/sdk/toggle_watch">watch its progress</a>, <a href="http://github.com/openzoom/sdk">download tags &amp; branches</a> or just quietly enjoy the power &amp; simplicity of the <a href="http://git-scm.com/">Git version control system</a>.</p>
<h2>Community</h2>
<p>The <strong>OpenZoom</strong> project has a thriving community over at <a href="http://openzoom.org/go/community">Get Satisfaction</a> with <strong>82+ topics posted</strong>, <strong>95+ people participating</strong> and <em>me answering questions and addressing bugs in matters of hours</em>.</p>
<p>Unless there&#8217;s something confidential about your project or you plan to ask me for my bank account for donations, I promise you&#8217;ll get a quicker answer on <a href="http://openzoom.org/go/community">Get Satisfaction</a> than by <a href="mailto:daniel@gasienica.ch">emailing</a> me.</p>
<h2>License</h2>
<p>In order to encourage a broad (ab)use of the <strong>OpenZoom SDK</strong>, I&#8217;ve added two additional licenses under which you can use it. The <strong>OpenZoom SDK</strong> is now licensed under <a href="http://www.mozilla.org/MPL/MPL-1.1.txt">MPL 1.1</a>/<a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPL 3</a>/<a href="http://www.gnu.org/licenses/lgpl-3.0.txt">LGPL 3</a>.</p>
<p>This licensing model was adopted from the famous <a href="http://mozilla.org/">Mozilla foundation</a> and their products I love so much: <strong>Firefox</strong> and <strong>Thunderbird</strong>.</p>
<p>Although I&#8217;m not a big fan of lawyers either, I strongly recommend you carefully read the licensing terms of the available licenses, choose the one that suits you &amp; your project best and consult with a lawyer if you have questions. <a href="http://www.youtube.com/watch?v=xoqUwyHseg4">You should never assume anything</a>.</p>
<p>With the current licensing model I want to encourage all kinds of projects &amp; products powered by the <strong>OpenZoom SDK</strong> while ensuring the constant evolution of <strong>OpenZoom SDK</strong>, including third-party improvements.</p>
<p>Should your project require a different kind of licensing scheme, please contact me at <a href="mailto:daniel@gasienica.ch">daniel@gasienica.ch</a>.</p>
<h3>Attribution</h3>
<p>Besides publishing any source code as required by the license you chose, please attribute your use of the <strong>OpenZoom SDK</strong> by creating a context menu entry with the caption <code>About OpenZoom...</code> linked to <a href="http://openzoom.org/">http://openzoom.org/</a>. Thanks.</p>
<blockquote class="flash">
<h2>Download &amp; Documentation</h2>
<p>Get the latest <strong>OpenZoom SDK</strong>, including source code, documentation, SWC library and 14 examples for Flash CS3, Flash CS4, Flex &amp; ActionScript projects.</p>
<p><a href="http://openzoom.org/sdk/download/latest/zip/">Download OpenZoom SDK (ZIP)</a></p>
<p>After you&#8217;ve downloaded the SDK, please read the <a href="http://docs.openzoom.org/sdk/">OpenZoom SDK API documentation</a>.
</p></blockquote>
<h3>Follow</h3>
<p>Keep up with the development progress of the <strong>OpenZoom SDK</strong> through <a href="http://twitter.com/OpenZoom">Twitter</a> and <a href="http://www.facebook.com/pages/OpenZoom/53991200768">Facebook</a>:</p>
<ul>
<li><a href="http://twitter.com/OpenZoom">Follow @OpenZoom on Twitter</a></li>
<li><a href="http://www.facebook.com/pages/OpenZoom/53991200768">Become a Fan of OpenZoom</a></li>
</ul>
<h3>Donations</h3>
<p class="footnote">With a donation you can support the future development of the <strong>OpenZoom SDK</strong> and other <strong>OpenZoom</strong> projects. Thank you.</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHJwYJKoZIhvcNAQcEoIIHGDCCBxQCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBlJrLVQNzJkEvF2/Dw0d+6SarPhzRcYMKtMBiYY6a8vD7sAsaCZuIkUoTww7twJLSa/c0RwjBMbEJaYMJg/FJqFE9JfrLvIMVdpD+whoWVtsI6gr/t8BNzTjaCwpnkJ7HE6leyobVci9mmva1dKYc8sQqUCX0q8lGnQrvUFDwVbTELMAkGBSsOAwIaBQAwgaQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQImEOH7e5jr6OAgYC/791t/6xdPhTlFyXafRF+YhpfBm76KXTwYIZ++mGZjxM5BthNF3x+62CybTtxokjv9Fky6plGQgyxh0v/ap4mt7fITwKHg2zHu5yXtTUG4a8Nv8wr1H5BYcGi/uNnzb77fKLPNf84/vtrtXPtLS5Js6y1MvHcUi8J5igkUxFdbaCCA4cwggODMIIC7KADAgECAgEAMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTAeFw0wNDAyMTMxMDEzMTVaFw0zNTAyMTMxMDEzMTVaMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwUdO3fxEzEtcnI7ZKZL412XvZPugoni7i7D7prCe0AtaHTc97CYgm7NsAtJyxNLixmhLV8pyIEaiHXWAh8fPKW+R017+EmXrr9EaquPmsVvTywAAE1PMNOKqo2kl4Gxiz9zZqIajOm1fZGWcGS0f5JQ2kBqNbvbg2/Za+GJ/qwUCAwEAAaOB7jCB6zAdBgNVHQ4EFgQUlp98u8ZvF71ZP1LXChvsENZklGswgbsGA1UdIwSBszCBsIAUlp98u8ZvF71ZP1LXChvsENZklGuhgZSkgZEwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAgV86VpqAWuXvX6Oro4qJ1tYVIT5DgWpE692Ag422H7yRIr/9j/iKG4Thia/Oflx4TdL+IFJBAyPK9v6zZNZtBgPBynXb048hsP16l2vi0k5Q2JKiPDsEfBhGI+HnxLXEaUWAcVfCsQFvd2A1sxRr67ip5y2wwBelUecP3AjJ+YcxggGaMIIBlgIBATCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA5MDgxNzAxMDUwMVowIwYJKoZIhvcNAQkEMRYEFNO8OQvBCvGKQlGkfb8BZoAFdiZ8MA0GCSqGSIb3DQEBAQUABIGAPXFB11JQ9VrfWXu+yD0uWu7q5wTCijEaw0qYxrcI8bDta+AZDKXHNxFESkMws9Tz0+agNi7ChJpcWDXyniCI5J3eAnIix4eQUUKPftUCpOzjbXt6NMco4Jo74S16Gkz0C0t8nGki0OkPx609IIWdHfxJUnqw1EPE/++zXE6eeTI=-----END PKCS7-----">
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"><br />
</form>
<h3>Stats</h3>
<p><script type="text/javascript" src="http://www.ohloh.net/p/22041/widgets/project_basic_stats.js"></script></p>
<h3>Footnote</h3>
<p class="footnote"><a name="cite-1">[1]</a> Thanks, Google, for not ever replying to my two emails and one tweet regarding my deep wish to get the much deserved <strong>openzoom</strong> project handle which is reserved by a #$*&#@ project on SourceForge (link purposely not included) which hasn&#8217;t even had a commit in four years.</p>
<p><br/></p>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/mqdhu_c49Vo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/openzoom-sdk/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/openzoom-sdk/</feedburner:origLink></item>
		<item>
		<title>OpenZoom, Is This Your Luggage?</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/vkzm8Cb3BH8/</link>
		<comments>http://gasi.ch/blog/openzoom-is-this-your-luggage/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 02:48:32 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[airport]]></category>
		<category><![CDATA[funny]]></category>
		<category><![CDATA[isthisyourluggage]]></category>
		<category><![CDATA[luggage]]></category>
		<category><![CDATA[remix]]></category>
		<category><![CDATA[showcase]]></category>
		<category><![CDATA[techcrunch]]></category>
		<category><![CDATA[zooming]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=1232</guid>
		<description><![CDATA[Lately I&#x27;ve been working a lot on very technical stuff around OpenZoom. I  desperately needed a break.
Then I stumbled upon Is This Your Luggage and I fell in love with the site instantaneously. But then I asked myself&#8230; Wouldn&#x27;t this be even more awesome using zooming?
Here we are, a couple of hours later. I&#x27;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#x27;ve been working a lot on very technical stuff around <a href="http://openzoom.org/">OpenZoom</a>. I  desperately needed a break.<br />
Then I stumbled upon <a href="http://www.isthisyourluggage.com/">Is This Your Luggage</a> and I fell in love with the site instantaneously. But then I asked myself&hellip; <q>Wouldn&#x27;t this be even more awesome using zooming?</q><br />
Here we are, a couple of hours later. I&#x27;ve ripped apart the <a href="http://www.isthisyourluggage.com/">original site</a> and put it together again but this time in a zooming environment. One nice side-effect has been that I&#x27;ve found a couple of rough edges in the <a href="http://docs.openzoom.org/sdk/">OpenZoom SDK API</a> that I was able to improve due this quick real-world check. Alright, enough talked, check it out!</p>
<blockquote class="info">
<h2>Remix: Is This Your Luggage</h2>
<p><a href="http://gasi.ch/examples/openzoom-is-this-your-luggage/" title="OpenZoom, Is This Your Luggage?"><img style="border: 3px solid #CCC" src="http://farm4.static.flickr.com/3594/3474363339_fafdee1f23.jpg" width="500" height="347" alt="OpenZoom, Is This Your Luggage?" /></a><br />
<a href="http://gasi.ch/examples/openzoom-is-this-your-luggage/">View Showcase</a> | <a href="http://isthisyourluggage.com/">View Original</a> | <a href="http://code.google.com/p/open-zoom/source/browse/openzoom/sdk/trunk/examples/flex/isthisyourluggage/src/IsThisYourLuggage.mxml?r=368">View Source</a></p>
<p><em>Disclaimer: This is nothing but a showcase for what you can do with zooming &amp; OpenZoom. If you liked this, please give proper respect to the author and <a href="http://www.isthisyourluggage.com/">visit the original site</a>.</em>
</p></blockquote>
<h3>P.S.</h3>
<p>This is supposed to demonstrate a bit what kind of experiences you can build with the <a href="http://code.google.com/p/open-zoom/">OpenZoom SDK</a>. It doesn&#8217;t always have to be high-resolution images and a boring layout. Hope you enjoy it. <img src='http://gasi.ch/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<br/></p>
<p class="footnote"><strong>Copyright:</strong> All Artwork &amp; Content Copyright 2009, <a href="http://www.isthisyourluggage.com/">Is This Your Luggage</a>.</p>
<p><br/></p>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/vkzm8Cb3BH8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/openzoom-is-this-your-luggage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/openzoom-is-this-your-luggage/</feedburner:origLink></item>
		<item>
		<title>Inline Multiscale Image Replacement</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/t1yozsFS1hs/</link>
		<comments>http://gasi.ch/blog/inline-multiscale-image-replacement/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 23:27:29 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[openzoom images hd high-resolution future vision multiscaleimage inlinemultiscaleimagereplacement replacement jquery javascript python opensource flash actionscript gpl collaboration]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=1056</guid>
		<description><![CDATA[How will we view and publish images on the web in 5 years? Today I&#8217;d like to share with you my vision of how we could improve the publication and viewing of high-resolution images on the web. Before discussing what this vision entails, I&#8217;d really like you to explore it yourself.
Scenarios
The following are three real-world [...]]]></description>
			<content:encoded><![CDATA[<p><q>How will we view and publish images on the web in 5 years?</q> Today I&#8217;d like to share with you my vision of how we could improve the publication and viewing of high-resolution images on the web. Before discussing what this vision entails, I&#8217;d really like you to explore it yourself.</p>
<h1>Scenarios</h1>
<p>The following are three real-world scenarios for publishing high-resolution images on the web: <strong>news</strong>, <strong>blogs</strong> and <strong>photo sharing</strong>. Explore any one or all of these scenarios and interact with the images withinâ€¦ <em>Come on, let&#8217;s get your mouse wheel spinnin&#8217;!</em> <img src='http://gasi.ch/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote class="info">
<h2>News: The New York Times</h2>
<p><a href="http://gasi.ch/examples/2009/04/08/inline-multiscale-image-replacement/nytimes/" title="Inline Multiscale Image Replacement"><img src="http://farm4.static.flickr.com/3299/3419715880_dfac0333de.jpg" width="500" height="500" alt="Inline Multiscale Image Replacement" /></a><br />
<a href="http://gasi.ch/examples/2009/04/08/inline-multiscale-image-replacement/nytimes/">View Demo</a> | <a href="http://www.nytimes.com/2007/08/12/world/asia/12afghan.html">View Original Page</a></p>
<p class="footnote"><em>Disclaimer: Since a high-resolution version of the original image was not available to me, I replaced it with another one from the Department of Defense which was taken in the same region, called Zabul Province.</em></p>
</blockquote>
<blockquote class="info">
<h2>Blogs: Information Architects</h2>
<p><a href="http://gasi.ch/examples/2009/04/08/inline-multiscale-image-replacement/ia/" title="Inline Multiscale Image Replacement"><img src="http://farm4.static.flickr.com/3651/3418905983_0cd00199f6.jpg" width="500" height="500" alt="Inline Multiscale Image Replacement" /></a><br />
<a href="http://gasi.ch/examples/2009/04/08/inline-multiscale-image-replacement/ia/">View Demo</a> | <a href="http://informationarchitects.jp/web-trend-map-4-final-beta/">View Original Page</a>
</p></blockquote>
<blockquote class="info">
<h2>Photo Sharing: Flickr</h2>
<p><a href="http://gasi.ch/examples/2009/04/08/inline-multiscale-image-replacement/flickr/" title="Inline Multiscale Image Replacement"><img src="http://farm4.static.flickr.com/3408/3419715614_95204d3df9.jpg" width="500" height="500" alt="Inline Multiscale Image Replacement" /></a><br />
<a href="http://gasi.ch/examples/2009/04/08/inline-multiscale-image-replacement/flickr/">View Demo</a> | <a href="http://www.flickr.com/photos/oliveralex/524852348/">View Original Page</a></p>
<p class="footnote"><em>Disclaimer: Due to conflicts, the original JavaScript that was included in the page was removed for this demo.</em></p>
</blockquote>
<h1>Vision</h1>
<p>The solution for publishing high-resolution images on the web I set out to develop had to have the following qualitiesâ€¦</p>
<h2>For Users</h2>
<ul>
<li>The user <strong>shall not pay</strong>, in terms of time or bandwidth, for large <strong>images she&#8217;s not interested in</strong>.</li>
<li>The solution shall <strong>degrade gracefully</strong>, e.g. fall back to <em>status quo</em>, for users that do not meet the technical requirements.</li>
<li>The solution shall offer <strong>a vastly enhanced experience for viewing high-resolution images on the web</strong>, including <strong>full screen support</strong> while <strong>retaining</strong> as many of the <strong>standard interactions</strong> with images as possible.</li>
<li>The user shall <strong>not be taken out of the context</strong> she was working in.</li>
</ul>
<h2>For Publishers</h2>
<ul>
<li>The solution shall offer <strong>simple publishing of high-resolution images</strong> and turn their <strong>exploration</strong> into an <strong>awesome experience</strong>!</li>
<li>The solution shall be as much <strong>backwards- &amp; forwards-compatible</strong> as possible.</li>
</ul>
<h1>Solution</h1>
<p>The solution I developed, based on something I started to call <strong>Inline Multiscale Image Replacement</strong>, is a combination of three different technologies from the <a href="http://openzoom.org/">OpenZoom</a> project, together known as <strong>OpenZoom Endo</strong>:</p>
<ul>
<li><strong>OpenZoom Caral</strong>: A <a href="http://python.org/">Python</a> tool to batch convert images into a multiscale image format based on the <a href="http://gasi.ch/blog/openzoom-description-format/">OpenZoom Description Format</a> and <a href="http://msdn.microsoft.com/en-us/library/cc645077(VS.95).aspx">Microsoft Deep Zoom</a>.</li>
<li><strong>OpenZoom Nano</strong>: A light-weight multiscale image viewer running in the Adobe Flash Player and built with the <a href="http://openzoom.org/">OpenZoom SDK</a>.</li>
<li><strong>OpenZoom Endo</strong>: A script performing progressive enhancement on new and existing HTML pages. It is written in JavaScript and packaged as <a href="http://jquery.com/">jQuery</a> plugin.</li>
</ul>
<blockquote class="info">
<h2>Features</h2>
<p><img src="http://farm4.static.flickr.com/3613/3419742376_15aaf47058.jpg" width="500" height="500" alt="Inline Multiscale Image Replacement" /></p>
<ul>
<li><strong>Simple publishing of high-resolution images on the web</strong>, even on existing pages.</li>
<li><strong>Continue to use interactions your already familiar with</strong> such as <em>Save Image Asâ€¦</em> and <em>View Image</em>. (Screenshot)</li>
<li><strong>Progressively enhance your browsing experience</strong>, with graceful fallback for those of you with browsers that are not JavaScript or Flash enabled.</li>
<li><strong>Never download more data than you currently look at.</strong></li>
<li>Take advantage of your entire screen real estate by using the <strong>full screen mode</strong>.</li>
<li>Explore the full glory of <strong>high-resolution images without</strong> ever <strong>leaving their page</strong>.</li>
<li><strong>Publish images in different sizes</strong> from the same source image.</li>
<li><strong>Free!</strong> <em>â€¦as in beer and freedom!</em><br/>Released under the GPLv3 open source license.</li>
</ul>
</blockquote>
<h3>Known Issues</h3>
<p>Of course, as with any <em>fresh-out-of-the-oven</em> technology there a couple of things that don&#8217;t work as intended. Here&#8217;s a list of <em>known issues</em>:</p>
<p class="footnote">Image replacement can be delayed by large pages, resulting in a visible page flicker.</p>
<p class="footnote">At this point, OpenZoom Endo does not pass the W3C validator due to the custom attribute <em>(XHTML namespaces &amp; custom DTDs, anyone?)</em></p>
<p class="footnote">Ideally, the viewer would initially feature some visual cues that convey the enhanced functionality. Add some simple controls to that. <em> Designer, anyone?</em></p>
<p class="footnote">Script sometimes conflicts with existing JavaScript within the same page.</p>
<p class="footnote">Multiple replacements of images cause performance problem related to Flash Player plugin instantiation.</p>
<p class="footnote">Images sometimes fail to load due to plugin activation issues.</p>
<p><br/></p>
<blockquote class="info">
<h2>Walkabout</h2>
<p>Let me quickly guide you through the basic process of publishing a high-resolution image on your web page:</p>
<ol>
<li>First, use Python and the <strong>OpenZoom Caral</strong> library to convert your image into a multiscale image pyramid and optionally define additional sizes of your image you&#8217;d like to publish or offer for download:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> openzoom
&nbsp;
creator = openzoom.<span style="color: black;">ImageCreator</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
creator.<span style="color: black;">create</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;awesome.jpg&quot;</span>, <span style="color: #483d8b;">&quot;awesome&quot;</span>, <span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">600</span>, <span style="color: #ff4500;">1920</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></div></div>

</li>
<li>Reference jQuery library (e.g., using Google) and the <strong>OpenZoom Endo</strong> script in your HTML page:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span>
 src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span>
 src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;openzoom-min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

</li>
<li>Place the <strong>OpenZoom Nano</strong> viewer SWF (<code>OpenZoomViewer.swf</code>) file into the same directory as your page.</li>
<li>Add the image to your HTML page and annotate it with the special <code>openzoom:source</code> attribute:<br />
<br/></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;img</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;awesome/awesome-600x320.jpg&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;600&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;320&quot;</span></span>
<span style="color: #009900;"> <span style="color: #000066;">openzoom:source</span>=<span style="color: #ff0000;">&quot;awesome/image.xml&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

</li>
<li>Enjoy hassle-free high-resolution imagery on the web!</li>
</blockquote>
<blockquote class="info">
<h2>Download &#038; Source</h2>
<ul>
<li>Download <a href="http://open-zoom.googlecode.com/files/openzoom-endo-0.4.zip">OpenZoom Endo (808kb)</a>  from Google Code.</li>
<li>Have a look at the <a href="http://code.google.com/p/open-zoom/source/browse/trunk/projects/endo/trunk?r=316#trunk/src">source code</a> on the OpenZoom Google Code repository.</li>
</ul>
</blockquote>
<h1>You</h1>
<p><strong>I want your feedback!</strong> Let me know if my idea works for youâ€¦ If it doesn&#8217;t, why not?â€¦ How could things be improved? <em>I am listening</em>. If you&#8217;re a JavaScript hacker, take apart my code and share with me what could be done better! If you&#8217;re a designer, consider contributing to a better interface for the viewer for an even better user experience! If you&#8217;re an iPhone user, let me know if my solution breaks when you check out one of the previous demos! If you think this is <em>b#$&#($*</em>, then share your vision of the future of high-resolution images on the web with me!<br />
As always, if you have feedback, questions or want to start a dialogue, feel free to leave a comment down below, head over to the awesome <a href="http://getsatisfaction.com/openzoom/">OpenZoom Get Satisfaction site</a> or follow me on Twitter: <a href="http://twitter.com/OpenZoom">@OpenZoom</a> and <a href="http://twitter.com/gasi">@gasi</a>. In case you find a bug, please file a bug report in the <a href="http://code.google.com/p/open-zoom/issues/">OpenZoom Google Code Bug System.</a></p>
<h2>Epilogue</h2>
<p>With this and my other work on the OpenZoom project, I want to explore new ways of interacting with visual information on the web. Join me and let&#8217;s explore how the future of browsers with the appropriate image formats that support high-definition images could look &amp; feel like!</p>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/t1yozsFS1hs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/inline-multiscale-image-replacement/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/inline-multiscale-image-replacement/</feedburner:origLink></item>
		<item>
		<title>GigaPan Mobile: GigaPan on iPhone &amp; iPod touch</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/DA6xdNdMIsg/</link>
		<comments>http://gasi.ch/blog/gigapan-mobile/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 00:14:15 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[deepzoom]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[gigapan]]></category>
		<category><![CDATA[gigapixel]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googleappengine]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[highresolution]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[multiscaleimage]]></category>
		<category><![CDATA[multiscaleimaging]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[panorama]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[touch]]></category>
		<category><![CDATA[zooming]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=988</guid>
		<description><![CDATA[Want to find your friend on the gigapixel Obama Inauguration panorama no matter where you are right now? With GigaPan Mobile you can. GigaPan Mobile brings the full range of currently more than 14&#8242;000 gigapans from GigaPan.org directly to your iPhone and iPod touch through Seadragon Mobile from Microsoft.

GigaPan Mobile 2.0
GigaPan Mobile 2.0 is here [...]]]></description>
			<content:encoded><![CDATA[<p>Want to find your friend on the <a href="http://gigapan-mobile.appspot.com/gigapan/17217">gigapixel Obama Inauguration panorama</a> no matter where you are right now? With GigaPan Mobile you can. GigaPan Mobile brings the full range of currently more than 14&#8242;000 gigapans from <a href="http://gigapan.org/">GigaPan.org</a> directly to your <a href="http://www.apple.com/iphone/">iPhone</a> and <a href="http://www.apple.com/ipodtouch/">iPod touch</a> through <a href="http://livelabs.com/seadragon-mobile/">Seadragon Mobile</a> from Microsoft.</p>
<blockquote class="flash">
<h2>GigaPan Mobile 2.0</h2>
<p>GigaPan Mobile 2.0 is here and there&#8217;s no need to add RSS feeds to your Seadragon Mobile, although you still can. Just grab your iPhone, launch Safari and head over to <a href="http://gigapan-mobile.appspot.com/">GigaPan Mobile</a> and start enjoying all 20&#8242;000+ gigapans in full glory.
</p></blockquote>
<h2>Quick Setup</h2>
<ol>
<li>Get an <a href="http://www.apple.com/iphone/">iPhone</a>/<a href="http://www.apple.com/ipodtouch/">iPod touch</a>.</li>
<li>Install <a href="http://www.itunes.com/app/seadragonmobile">Seadragon Mobile</a>.</li>
<li>Add the <a href="http://gigapan-mobile.appspot.com/feed">GigaPan Mobile RSS</a> feed to Seadragon Mobile.</li>
</ol>
<blockquote class="info">
<h2>GigaPan Mobile RSS Feed</h2>
<p><a href="http://gigapan-mobile.appspot.com/feed"><code>http://gigapan-mobile.appspot.com/feed</code></a>
</p></blockquote>
<blockquote class="info">
<h2>Setup</h2>
<ol>
<li><a href="http://www.itunes.com/app/seadragonmobile">Install Seadragon Mobile</a> from the <a href="http://www.apple.com/iphone/appstore/">Apple AppStore</a>.</li>
<li>Launch <em>Seadragon Mobile</em>â€¦
<div align="center">
<img src="http://farm4.static.flickr.com/3611/3301180401_e694bc4bb8_o.png" width="320" height="480" alt="GigaPan Mobile" /><br />
<img src="http://farm4.static.flickr.com/3304/3301180493_ef17b8e4cc_o.png" width="320" height="480" alt="GigaPan Mobile" />
</div>
</li>
<li>Tap the <em>+ button</em> in the lower right corner to add custom contentâ€¦
<div align="center">
<img src="http://farm4.static.flickr.com/3344/3302011366_5df1739e0c_o.png" width="320" height="480" alt="GigaPan Mobile" />
</div>
</li>
<li>Choose <em>RSS feed</em>â€¦
<div align="center">
<img src="http://farm4.static.flickr.com/3297/3301180645_336012e2c2_o.png" width="320" height="480" alt="GigaPan Mobile" />
</div>
</li>
<li>Enter the URL for the <em>GigaPan Mobile</em> feed from above and tap <em>Done</em>.
<div align="center">
<img src="http://farm4.static.flickr.com/3336/3302011582_6a6ba7c0fe_o.png" width="320" height="480" alt="GigaPan Mobile" />
</div>
</li>
</ol>
</blockquote>
<blockquote class="info">
<h2>Browse GigaPan Mobile</h2>
<ul>
<li>Go to the newly added <em>GigaPan</em> feed in <em>Seadragon Mobile</em>â€¦
<div align="center">
<img src="http://farm4.static.flickr.com/3625/3302111798_a46b8883ef_o.png" width="320" height="480" alt="GigaPan Mobile" /><br />
<img src="http://farm4.static.flickr.com/3394/3302011676_3c64efb817_o.png" width="320" height="480" alt="GigaPan Mobile" />
</div>
</li>
<li>â€¦and explore the details of <a href="http://www.gigapan.org/viewGigapan.php?id=17217">one</a> of the 10 most popular gigapans from <a href="http://gigapan.org/">GigaPan.org</a> with just the tips of your fingers.
<div align="center">
<img src="http://farm4.static.flickr.com/3442/3301181091_dca901cb05_o.png" width="320" height="480" alt="GigaPan Mobile" /><br />
<img src="http://farm4.static.flickr.com/3625/3302012476_04dd55b8fa_o.png" width="480" height="320" alt="GigaPan Mobile" />
</div>
</li>
</ul>
<p class="footnote">Photo <a href="http://gigapan-mobile.appspot.com/gigapan/17217">President Barack Obama&#8217;s Inaugural Address</a> &#169; 2009, <a href="http://davidbergman.net">David Bergman</a></p>
</blockquote>
<h3>Inside GigaPan Mobile</h3>
<p>GigaPan Mobile was built using <a href="http://python.org/">Python</a>, <a href="http://code.google.com/appengine/">Google App Engine</a> and knowledge acquired through the <a href="http://openzoom.org/">OpenZoom project</a>.</p>
<h3>20&#8242;000+ Gigapans (Update &ndash; 04.08.2009)</h3>
<p>To see one of more than 20&#8242;000 gigapans with Seadragon Mobile, simply add the following link as <em>Deep Zoom Content</em>, where <strong>&lt;ID&gt;</strong> is the gigapan ID number:</p>
<blockquote class="info">
<h2>Custom GigaPan Content for Seadragon Mobile</h2>
<p><code>http://gigapan-mobile.appspot.com/gigapan/<strong>&lt;ID&gt;</strong>.dzi</code>
</p></blockquote>
<p><strong>Example:</strong> Obama Inaugural Address<br/><a href="http://gigapan-mobile.appspot.com/gigapan/17217.dzi">http://gigapan-mobile.appspot.com/gigapan/17217.dzi</a></p>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/DA6xdNdMIsg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/gigapan-mobile/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/gigapan-mobile/</feedburner:origLink></item>
		<item>
		<title>GigaPan Desktop</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/_AexUA2I-7Y/</link>
		<comments>http://gasi.ch/blog/gigapan-desktop/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 16:52:32 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[gigapan]]></category>
		<category><![CDATA[GPL]]></category>
		<category><![CDATA[multiscaleimage]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[zoom]]></category>
		<category><![CDATA[zooming]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=972</guid>
		<description><![CDATA[Ever wanted to check out those super-high-resolution images from GigaPan.org in fullscreen? Now you can with GigaPan Desktop. Last week I&#8217;ve built a desktop application for viewing GigaPan images in fullscreen using Adobe AIR and the OpenZoom SDK. You can choose gigapans from a list of the most recent ones or simply by typing in [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wanted to check out those <em>super-high-resolution</em> images from <a href="http://gigapan.org">GigaPan.org</a> in fullscreen? Now you can with GigaPan Desktop. Last week I&#8217;ve built a desktop application for viewing GigaPan images in fullscreen using <a href="http://www.adobe.com/products/air/">Adobe AIR</a> and the <a href="http://openzoom.org/">OpenZoom SDK</a>. You can choose gigapans from a list of the most recent ones or simply by typing in the ID number of the gigapan. The application runs on Windows, Mac&nbsp;OS&nbsp;X and Linux.</p>
<blockquote class="info">
<h2>GigaPan Desktop</h2>
<p><a href="http://openzoom.org/go/gigapan" title="GigaPan Desktop by Daniel Gasienica"><img src="http://farm4.static.flickr.com/3454/3294731601_887f8aa409.jpg" width="500" height="324" alt="GigaPan Desktop" /></a><br />
<h3>Keyboard Shortcuts</h3>
<ul>
<li><strong>F</strong>: <em>Toggle Fullscreen</em></li>
<li><strong>H</strong>: <em>Show All</em></li>
<li><strong>W, S, A, D</strong> or <strong>arrow keys</strong>: <em>Pan</em></li>
<li><strong>I, O</strong> or <strong>+, â€“</strong>: <em>Zoom</em></li>
</ul>
<h3>Download &amp; Source</h3>
<p><a href="http://openzoom.org/go/gigapan">Download</a> | <a href="http://code.google.com/p/open-zoom/source/browse/openzoom/gigapan-desktop/trunk/?r=358">View Source</a>
</p></blockquote>
<h3>Feedback</h3>
<p>Please post feedback and feature requests on the <a href="http://getsatisfaction.com/openzoom">GetSatisfaction OpenZoom channel</a>, thanks.</p>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/_AexUA2I-7Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/gigapan-desktop/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/gigapan-desktop/</feedburner:origLink></item>
		<item>
		<title>OpenZoom Visualization: Z-Order</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/a0oC0Qt_xbo/</link>
		<comments>http://gasi.ch/blog/openzoom-visualization-z-order/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 20:30:21 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[datavisualization]]></category>
		<category><![CDATA[dataviz]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[fractal]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[morton]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[visualization]]></category>
		<category><![CDATA[zoomableuserinterface]]></category>
		<category><![CDATA[zorder]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=939</guid>
		<description><![CDATA[This weekend I&#8217;ve been playing around with a couple of things related to the OpenZoom project. The following is a small but beautiful example I wanted to share with you: A visualization of the Z-order (Morton-order) curve in a zoomable environment using the OpenZoom framework. Behind the scenes there are some real gems: Bit Twiddling [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend I&#8217;ve been playing around with a couple of things related to the OpenZoom project. The following is a small but beautiful example I wanted to share with you: A visualization of the <a href="http://en.wikipedia.org/wiki/Z-order_(curve)">Z-order (Morton-order)</a> curve in a zoomable environment using the OpenZoom framework. Behind the scenes there are some real gems: <a href="http://code.google.com/p/open-zoom/source/browse/trunk/src/main/flash/org/openzoom/flash/utils/ZOrder.as">Bit Twiddling Hacks</a>, <a href="http://en.wikipedia.org/wiki/Z-order_(curve)">Mathematics</a>, <a href="http://getsatisfaction.com/livelabs/topics/vector_graphics_in_seadragon_also_see_zoomism_com">Vectors in OpenZoom</a>. Enjoyâ€¦</p>
<blockquote class="info">
<h2>Demo: Z-Order Visualization</h2>
<p><a href="http://gasi.ch/examples/2009/01/04/z-order-visualization/" title="Z-Order Visualization"><img src="http://farm4.static.flickr.com/3261/3166780093_7b2d2eedf8.jpg" width="500" height="279" alt="Z-Order" /></a><br />
<a href="http://gasi.ch/examples/2009/01/04/z-order-visualization/">View Demo</a> | <a href="http://gasi.ch/examples/2009/01/04/z-order-visualization/source/">View Source</a> | <a href="http://code.google.com/p/open-zoom/source/browse/trunk/src/main/flash/org/openzoom/flash/utils/ZOrder.as">View ZOrder Class Source</a>
</p></blockquote>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/a0oC0Qt_xbo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/openzoom-visualization-z-order/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/openzoom-visualization-z-order/</feedburner:origLink></item>
		<item>
		<title>Pimp Your Photoshop Zoomify with OpenZoom</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/NNRD5MZMDq0/</link>
		<comments>http://gasi.ch/blog/pimp-your-photoshop-zoomify-with-openzoom/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 23:20:30 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[multiscaleimage]]></category>
		<category><![CDATA[multiscaleimaging]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[viewer]]></category>
		<category><![CDATA[zoomify]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=865</guid>
		<description><![CDATA[Part of my passion for OpenZoom is the promotion of the beauty of large photos on the web and giving people the right tools to publish them. Enabling people to publish their images means building tools that support and enhance the workflow they&#x27;re already familiar with.
You might know that since version CS3 Adobe Photoshop has [...]]]></description>
			<content:encoded><![CDATA[<p>Part of my passion for <a href="http://openzoom.org/">OpenZoom</a> is the promotion of the beauty of large photos on the web and giving people the right tools to publish them. Enabling people to publish their images means building tools that support and enhance the workflow they&#x27;re already familiar with.</p>
<p>You might know that since version CS3 <a href="http://www.adobe.com/products/photoshop/photoshop/">Adobe Photoshop</a> has a great built-in feature for <a href="http://www.zoomify.com/photoshop.htm">exporting high-resolution images with Zoomify</a>. The feature works really great. Although it took my machine a couple of minutes, I&#x27;ve managed to export a beautiful <em>86400&#215;43200 pixel</em> version of the <a href="http://visibleearth.nasa.gov/view_set.php?categoryID=2355">NASA Blue Marble</a> images. The feature would be perfect if it wasn&#x27;t for the <em>not so perfect</em>, <em>not so smooth</em> <a href="http://www.zoomify.com/">Zoomify</a> viewer that is used to view the exported image.</p>
<h2>Scratching Your Own Itch</h2>
<p>Therefore, while enjoying the calm of the holidays, I sat down and developed an <a href="http://openzoom.org/">OpenZoom</a> viewer that you can use as an drop-in replacement for the built-in Zoomify viewer in Adobe Photoshop.</p>
<blockquote class="info">
<h2>Demo: OpenZoom Viewer for Adobe Photoshop</h2>
<p>New and improved viewer built with the <a href="http://openzoom.org/">OpenZoom SDK</a>:</p>
<p><a href="http://gasi.ch/examples/2008/12/23/photoshop-openzoom-viewer/openzoom/" title="OpenZoom Viewer for Adobe Photoshop"><img src="http://farm3.static.flickr.com/2134/2041196959_db9cc76bbc.jpg" width="500" height="375" alt="" /></a><br />
<a href="http://gasi.ch/examples/2008/12/23/photoshop-openzoom-viewer/openzoom/">View Demo</a> | <a href="http://github.com/openzoom/nano/raw/1b0dbf94c5083c07afdd0dc134ac2acfd267b277/src/OpenZoomViewer.as">View Source</a></p>
<h2>Features</h2>
<ul>
<li><strong>Fullscreen support</strong></li>
<li><strong>Mouse navigation</strong> (<strong>click</strong> to <em>zoom in</em> and <strong>Shift-click</strong> to <em>zoom out</em>)</li>
<li><strong>Mouse wheel support</strong> in all browsers (<strong>scroll</strong> to <em>zoom</em>)</li>
<li><strong>Keyboard navigation</strong> (<em>Pan</em> with <strong>W, S, A, D</strong> or <strong>arrow keys</strong>, <em>Zoom</em> with <strong>+ / &ndash;</strong> or <strong>I and O</strong>, <em>Show All</em> with <strong>H</strong>, <em>Fullscreen</em> with <strong>F</strong>.)</li>
<li><strong>Context Menu</strong> support</li>
<li><strong>Standards-compliant</strong> Flash embed through <a href="http://swfobject.googlecode.com/">SWFObject</a></li>
<li><strong>6 templates</strong> &mdash; <em>Normal / Fullscreen: black, gray and white.</em></li>
<li><strong>Just 40KB</strong> &mdash; <em>100% Flash, no Flex.</em></li>
<li><strong>100% Open Source.</strong> No branding.</li>
</ul>
</blockquote>
<blockquote class="info">
<h2>Demo: Zoomify Viewer for Adobe Photoshop</h2>
<p>For comparison, this is the old Zoomify viewer in Photoshop:</p>
<p><a href="http://gasi.ch/examples/2008/12/23/photoshop-openzoom-viewer/zoomify/" title="Zoomify Viewer for Adobe Photoshop"><img src="http://farm4.static.flickr.com/3119/3131151323_30940a5f34.jpg" width="500" height="355" alt="Zoomify Viewer" /></a><br />
<a href="http://gasi.ch/examples/2008/12/23/photoshop-openzoom-viewer/zoomify/">View Demo</a>
</p></blockquote>
<blockquote class="info">
<h2>Download</h2>
<ol>
<li><a href="http://openzoom.org/tango/download/latest/zip/">Download OpenZoom Viewer Templates <br/>for Adobe Photoshop CS3/CS4 (ZIP &#8211; 86KB)</a>.</li>
<li>For installation and tutorials, read the instructions in <a href="http://github.com/openzoom/tango/raw/master/README.txt">README.txt</a></li>
<li><em>Enjoy and let me know what you come up with!</em></li>
</ol>
<h3>Update &mdash; March 25, 2009</h3>
<p>The OpenZoom Viewer Templates received an update in the form of a <strong>0.3 release</strong> and are now known as <strong>OpenZoom Tango</strong>.</p>
<h3>Update &mdash; August 9, 2009</h3>
<p>With the <strong>0.5.2 release</strong>, <strong>OpenZoom Tango</strong> has moved from <a href="http://open-zoom.googlecode.com/">Google Code</a> to <a href="http://github.com/openzoom/tango/">GitHub</a>. Additionally, <strong>OpenZoom Tango</strong> is now licensed under the <a href="http://www.mozilla.org/MPL/MPL-1.1.txt">MPL 1.1</a>/<a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPL 3</a>/<a href="http://www.gnu.org/licenses/lgpl-3.0.txt">LGPL 3</a> licenses.</p>
<p><em>P.S. To get started, check out this great tutorial called <a href="http://www.photoshopessentials.com/photo-editing/zoomify/">Zoomify High Resolution Images With Photoshop CS3</a>.</em>
</p></blockquote>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/NNRD5MZMDq0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/pimp-your-photoshop-zoomify-with-openzoom/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/pimp-your-photoshop-zoomify-with-openzoom/</feedburner:origLink></item>
		<item>
		<title>OpenZoom Description Format</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/MLyH1s91LA8/</link>
		<comments>http://gasi.ch/blog/openzoom-description-format/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 03:17:33 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[tandem]]></category>
		<category><![CDATA[computerscience]]></category>
		<category><![CDATA[deepzoom]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[discussion]]></category>
		<category><![CDATA[dzi]]></category>
		<category><![CDATA[fileformats]]></category>
		<category><![CDATA[googlemaps]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[multiscaleimaging]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[openzoomdescriptionformat]]></category>
		<category><![CDATA[seadragon]]></category>
		<category><![CDATA[tileoverlap]]></category>
		<category><![CDATA[virtualearth]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[yahoomaps]]></category>
		<category><![CDATA[zoomify]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=603</guid>
		<description><![CDATA[When we look at multi-scale or multi-resolution imaging in 2008,1 we&#8217;re mostly looking at a pile of image files2 (called tiles) that make up an image pyramid.3 Typically, image file formats, e.g. JPEG and PNG, have stored their properties such as width and height inside the file. These formats acted not only as carrier of [...]]]></description>
			<content:encoded><![CDATA[<p>When we look at <em>multi-scale</em> or <em>multi-resolution</em> imaging in 2008,<sup><a href="#footnote-1-3">1</a></sup> we&#8217;re mostly looking at a pile of image files<sup><a href="#footnote-2">2</a></sup> (called <em>tiles</em>) that make up an image pyramid.<sup><a href="#footnote-1-3">3</a></sup> Typically, image file formats, e.g. JPEG and PNG, have stored their properties such as width and height inside the file. These formats acted not only as carrier of image data but also as container for the metadata associated with it. This is a manifestation of the <a href="http://blogs.msdn.com/pix/archive/2006/08/16/702780.aspx">The Truth Is in the File</a> paradigm.</p>
<h2>The Truth Is Out There</h2>
<p>Taking this paradigm into account, we suddenly encounter a problem with multi-scale images. If the original image is exploded into many little pieces, where do we store its metadata? There are different solutions to this problem. For mapping sites such as Google Maps and Yahoo Maps it is probably sufficient to just hard-code the image pyramid properties and how to access the tiles directly inside the client. However, for general multi-scale image viewing technologies such as <a href="http://www.zoomify.com/">Zoomify</a>, <a href="http://livelabs.com/blog/seadragon/silverlight-2-deep-zoom/">Deep Zoom</a> or <a href="http://openzoom.org/">OpenZoom</a> this is not an option since we don&#8217;t know the properties of the images until run-time. Again, there&#8217;s a simple and elegant solution to for this: <em>XML description files that carry the image metadata.</em></p>
<h2>Rumble In the Jungle</h2>
<p>In the following section I will first quickly present you the two dominant multi-scale image description formats out there: <a href="http://www.zoomify.com/">Zoomify</a> and <a href="http://msdn.microsoft.com/en-us/library/cc645077(VS.95).aspx">Microsoft Deep Zoom</a>. After that, I will introduce you to a new description format I designed called <a href="http://openzoom.org/specs/">OpenZoom description format</a>. </p>
<p><em>Note: The following examples all describe a 10&nbsp;megapixel JPEG image with the name <strong>bruges</strong>.</em></p>
<blockquote class="info">
<h2>Zoomify</h2>
<p><strong>Example</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;IMAGE_PROPERTIES</span> <span style="color: #000066;">VERSION</span>=<span style="color: #ff0000;">&quot;1.8&quot;</span></span>
<span style="color: #009900;"> <span style="color: #000066;">WIDTH</span>=<span style="color: #ff0000;">&quot;3872&quot;</span> <span style="color: #000066;">HEIGHT</span>=<span style="color: #ff0000;">&quot;2592&quot;</span> <span style="color: #000066;">TILESIZE</span>=<span style="color: #ff0000;">&quot;256&quot;</span></span>
<span style="color: #009900;"> <span style="color: #000066;">NUMTILES</span>=<span style="color: #ff0000;">&quot;241&quot;</span> <span style="color: #000066;">NUMIMAGES</span>=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>This Zoomify image has the following structure on the file system:<br />
<strong>Descriptor</strong><br />
<code>bruges/ImageProperties.xml</code><br />
<code><strong>[filename]/ImageProperties.xml</strong></code></p>
<p><strong>Tiles</strong><br />
<code>bruges/TileGroup0/0-0-0.jpg</code><br />
<code>bruges/TileGroup0/1-0-0.jpg</code><br />
<code>bruges/TileGroup0/1-0-1.jpg</code><br />
<code>bruges/TileGroup0/1-1-0.jpg</code><br />
<code>bruges/TileGroup0/1-1-1.jpg</code><br />
<code>bruges/TileGroup0/2-0-0.jpg</code><br />
&hellip;<br />
<code>bruges/TileGroup0/4-15-9.jpg</code><br />
<code><strong>[filename]/TileGroup[X]/[level]-[column]-[row].jpg</strong></code>
</p></blockquote>
<blockquote class="info">
<h2>Deep Zoom Image (DZI)</h2>
<p><strong>Example</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Image</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://schemas.microsoft.com/deepzoom/2008&quot;</span></span>
<span style="color: #009900;">       <span style="color: #000066;">TileSize</span>=<span style="color: #ff0000;">&quot;256&quot;</span> <span style="color: #000066;">Overlap</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">Format</span>=<span style="color: #ff0000;">&quot;jpg&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Size</span> <span style="color: #000066;">Width</span>=<span style="color: #ff0000;">&quot;3872&quot;</span> <span style="color: #000066;">Height</span>=<span style="color: #ff0000;">&quot;2592&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/Image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>This <a href="http://msdn.microsoft.com/en-us/library/cc645077(VS.95).aspx">Deep Zoom image (DZI)</a> has the following structure on the file system:<br />
<strong>Descriptor</strong><br />
<code>bruges.xml</code><br />
<code><strong>[filename].[xml|dzi]</strong></code></p>
<p><strong>Tiles</strong><br />
<code>bruges_files/0/0_0.jpg</code><br />
<code>bruges_files/1/0_0.jpg</code><br />
<code>bruges_files/2/0_0.jpg</code><br />
&hellip;<br />
<code>bruges_files/9/0_0.jpg</code><br />
<code>bruges_files/9/0_1.jpg</code><br />
<code>bruges_files/9/1_0.jpg</code><br />
<code>bruges_files/9/1_1.jpg</code><br />
&hellip;<br />
<code>bruges_files/12/15_9.jpg</code><br />
<code><strong>[filename]_files/[level]/[column]-[row].[extension]</strong></code>
</p></blockquote>
<blockquote class="info">
<h2>OpenZoom Description Format</h2>
<p>The following is actually a description of the Deep Zoom image we&#8217;ve looked at previously.</p>
<p><strong>Descriptor</strong><br />
<code>bruges.xml</code></p>
<p><code><strong>[filename].xml</strong></code></p>
<p><strong>Tiles</strong><br />
<em>Wherever you wish&hellip;</em></p>
<p><strong>Example</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;image</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://ns.openzoom.org/openzoom/2008&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pyramid</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;131072&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;131072&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;image/jpeg&quot;</span></span>
<span style="color: #009900;">           <span style="color: #000066;">tileWidth</span>=<span style="color: #ff0000;">&quot;256&quot;</span> <span style="color: #000066;">tileHeight</span>=<span style="color: #ff0000;">&quot;256&quot;</span> <span style="color: #000066;">tileOverlap</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">origin</span>=<span style="color: #ff0000;">&quot;topLeft&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;level</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">columns</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;bruges_files/0/{column}_{row}.jpg&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/level<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;level</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;2&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;2&quot;</span> <span style="color: #000066;">columns</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;bruges_files/1/{column}_{row}.jpg&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/level<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
       â€¦
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;level</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;242&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;162&quot;</span> <span style="color: #000066;">columns</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;bruges_files/8/{column}_{row}.jpg&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/level<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;level</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;484&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;324&quot;</span> <span style="color: #000066;">columns</span>=<span style="color: #ff0000;">&quot;2&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;bruges_files/9/{column}_{row}.jpg&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/level<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;level</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;968&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;648&quot;</span> <span style="color: #000066;">columns</span>=<span style="color: #ff0000;">&quot;4&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;bruges_files/10/{column}_{row}.jpg&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/level<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;level</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;1936&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;1296&quot;</span> <span style="color: #000066;">columns</span>=<span style="color: #ff0000;">&quot;8&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;6&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;bruges_files/11/{column}_{row}.jpg&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/level<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;level</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;3872&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;2592&quot;</span> <span style="color: #000066;">columns</span>=<span style="color: #ff0000;">&quot;16&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;11&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;bruges_files/12/{column}_{row}.jpg&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/level<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/pyramid<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/image<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><a href="http://openzoom.org/specs/">OpenZoom Description Format XML Schema (Draft)</a>
</p></blockquote>
<h2>Not Invented Here</h2>
<p>Alright, we&#8217;ve seen examples of all three description formats for the same image. Before anything else, you might ask yourself: <em>Why the #&#038;$@ another format?</em> Good attitude and glad you asked. Hopefully, I will be able to answer this question for most of you. If not, just leave me a comment, I&#8217;d be glad to discuss this further. Now, let&#8217;s compare these three formats by looking at where they shine but of course also at their shortcomings.</p>
<h3>Conciseness</h3>
<p>Obviously, <strong>Zoomify</strong> and <strong>Deep Zoom</strong> win big time here. Their description files have a <strong>couple of lines vs the 40+ lines</strong> of the <strong>OpenZoom</strong> descriptor which inherently is very verbose <em>&mdash; Ed.: Levels 2&ndash;7 omitted for esthetic reasons</em>. On the other hand, we should keep in mind that everything we see in the <strong>OpenZoom</strong> descriptor sample somehow has to be computed by the client for the other two formats. More on that later.</p>
<h3>Portability</h3>
<p>Not sure if portability is the right term, but let me explain what I mean: <em>How flexible is the format regarding the storage of the descriptor and its image tiles?</em> <strong>Deep Zoom</strong> is the most extreme case of the three where the <strong>descriptor file and the image tiles</strong> are <strong>strongly coupled</strong> through the original file name of your image. That means if you move your descriptor you always have to remember to move the image data folder as well. This could be considered risky as the two are not contained in one folder. <strong>Zoomify</strong> has the <strong>same limitation</strong> but at least the image data and its descriptor are both contained in the same folder that carries the name of the original image. <strong>OpenZoom</strong> is clearly <strong>the most portable</strong> of the three as it let&#8217;s you specify the descriptor file independently of the image tiles.</p>
<p><em><strong>Important Note:</strong> Both Microsoft and Zoomify  offer an alternative storage method in the form of a single-file format. They are called <a href="http://www.zoomify.com/support.htm#a20061222_2108">Zoomify&#8217;s Pyramidal File Format (PFF)</a> and DZIZ (a <a href="http://en.wikipedia.org/wiki/ZIP">ZIP</a>-based container for DZI) which I&#8217;ve seen used by <a href="http://livelabs.com/photosynth/">Microsoft Photosynth</a>.</em></p>
<h3>Flexibility</h3>
<p><strong>Flexibility</strong> apparently was <strong>not a design goal of Microsoft or Zoomify</strong>. This is fine considering that the design of such a new format requires these kinds of trade-offs. Their assumption is that the descriptor file and the image tiles are strongly coupled and the latter are computed with a well-defined algorithm and stored in a fixed file hierarchy. Flexibility is <em>the</em> area where the <strong>OpenZoom description format</strong> shines. When I worked on the OpenZoom description format, I obviously followed the <a href="http://www.python.org/dev/peps/pep-0020/">Python Zen</a> which states <q>Explicit is better than implicit.</q> Although one drawback is the verbosity of the format, there are many advantages we can get from it. For example, when I worked on the <a href="http://openzoom.org/">OpenZoom framework</a>, I wanted to test it with some really large multi-scale images that are out there. Well, what is the largest image out there that I know of? A map of the world, of course. The <a href="http://openstreetmap.org/">OpenStreetMap Project</a>, for example, features many, many gigapixels of image data. Fine, so how do I test the framework with a map? <a href="http://modestmaps.mapstraction.com/trac/browser/trunk/as2/lib/com/modestmaps/mapproviders/OpenStreetMapProvider.as?rev=192">Hard-code the URLs</a> somewhere? <em>No, no</em>. Let&#8217;s create a descriptor for it. <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/source/images/openstreetmap.xml">So I did</a>. <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/source/images/openstreetmap.xml">Grab it</a> and play with it with your copy of the <a href="http://code.google.com/p/open-zoom/">OpenZoom framework</a>. <em>Look Ma&#8217;, no code!</em></p>
<p>This example demonstrates one of the advantages of the format, namely your descriptor file does not have to be stored along with your image data. Just put your descriptor wherever you wish and point it to the image tiles.</p>
<h2>Features: OpenZoom Description Format</h2>
<p>The following section gives you a short summary of some of the features in the OpenZoom description format.</p>
<p><strong>Flexible Pyramid Layout</strong><br />
Behind both Zoomify and Deep Zoom, there are well-specified algorithms that create the image pyramid and define its properties. To get an idea of how the formats expand the information you previously saw in their descriptors, feel free to take a look at their implementation in <a href="http://open-zoom.googlecode.com/">OpenZoom</a>: <a href="http://code.google.com/p/open-zoom/source/browse/trunk/src/main/flash/org/openzoom/flash/descriptors/zoomify/ZoomifyDescriptor.as">ZoomifyDescriptor</a> and <a href="http://code.google.com/p/open-zoom/source/browse/trunk/src/main/flash/org/openzoom/flash/descriptors/deepzoom/DZIDescriptor.as">DZIDescriptor</a>.</p>
<p>The OpenZoom description format doesn&#8217;t require a particular layout of the image pyramid. One requirement would be that every level of the pyramid approximately has the same aspect ratio but I&#8217;ve even managed to work around that constraint. To give you an idea of how powerful this flexibility is, consider the following couple of facts:</p>
<ol>
<li>The OpenZoom description format can express both, the properties of a Deep Zoom image pyramid, as well as the one produced by Zoomify. Besides these, it supports the pyramids of <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/source/images/openstreetmap.xml">OpenStreetMap</a>, Google Maps (<a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/source/images/google-maps-road.xml">road</a>, <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/source/images/google-maps-terrain.xml">terrain</a> and <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/source/images/google-maps-satellite.xml">satellite</a>) and many more.</li>
<li>Just like in Deep Zoom, you can specify <strong>tile overlap</strong><sup><a href="#footnote-5">5</a></sup> in the OpenZoom description format.</li>
<li>Unlike Deep Zoom or Zoomify, the OpenZoom description format also supports non-square image tiles by exposing a <strong>tileWidth</strong> as well as a <strong>tileHeight</strong> property. Deep Zoom and Zoomify obviously don&#8217;t have to support this as they know that their algorithms don&#8217;t produce non-square tiles. The OpenZoom format however, has to accomodate legacy multi-scale image data that has non-square tiles.
<li>One thing that surprised me most is the fact that even images on Flickr which are stored in many different dimensions can be put into relationship of an image pyramid. The levels of a <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/source/images/flickr.xml">Flickr image pyramid</a> are quite irregular compared to Deep Zoom and Zoomify as they are bounded by maximum sidelengths of <em>100, 240, 500, 1024</em> and <em>original</em>. Even though it isn&#8217;t very efficient since Flickr doesn&#8217;t support tiles, images from Flickr can be rendered as multi-scale images inside <a href="http://openzoom.org/">OpenZoom</a>.</li>
</ol>
<p><strong>Important Note:</strong> <em>Deep Zoom features a powerful concept called <a href="http://msdn.microsoft.com/en-us/library/cc645077(VS.95).aspx#Sparse_Images">Sparse Images</a> not present in any other format known to me. However, I am considering to incorporate this feature into the OpenZoom description format at a later date.</em></p>
<p><strong>Powerful Addressing Scheme</strong><br />
The description format again makes minimal assumptions about the location of the image tiles. Only the following two conditions have to be met: Tiles have to be addressable by their <em>column</em> and <em>row</em> in a <a href="http://en.wikipedia.org/wiki/Cartesian_coordinate_system">cartesian or rectangular coordinate system</a>. The client then simply applies string substitution to the reserved tokens <strong>{row}</strong> and <strong>{column}</strong> and replaces them with coordinates that have a range of <strong>[0, numRows)</strong> or <strong>[0, numColumns)</strong> respectively. The upper bounds <strong>numRows</strong> and <strong>numColumns</strong> are specified on the corresponding <strong>level</strong> element.</p>
<p>Important to note is that unlike Zoomify which only seems to support JPEG tiles anyway and Deep Zoom where the extension is specified in the descriptor, the OpenZoom description format makes no assumptions about the file extension of the tiles whatsoever. In the days where server-side scripts with a extensions like <em>.php</em> or <em>.cfm</em> serve us images, it would be negligent to rely on the file type extension. For the client to decide if it can render the images that are being served, the format features a <strong>type</strong> property on the <strong>pyramid</strong> element that specifies the mime type of the tiles.</p>
<p><strong>Exceptions:</strong> <em>Obviously, no matter how powerful a design is, there are always things it can't handle. For the OpenZoom description format this means sources such as <a href="http://maps.live.com/">Microsoft's Virtual Earth</a> or the <a href="http://gigapan.org/">GigaPan</a> project which both feature a <a href="http://de.wikipedia.org/wiki/Quadtree">quadtree</a>-based addressing scheme. That the OpenZoom description format cannot describe these kinds of sources doesn't mean the OpenZoom framework can't render them. However, doing that involves some amount of code which in the case of OpenZoom would mean to implement the <a href="http://code.google.com/p/open-zoom/source/browse/trunk/src/main/flash/org/openzoom/flash/descriptors/IMultiScaleImageDescriptor.as">IMultiScaleImageDescriptor</a> interface. For Silverlight Deep Zoom that would be the abstract <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.multiscaletilesource(VS.95).aspx">MultiScaleTileSource</a> class.</em></p>
<p><strong>Support for Multiple URLs</strong><br />
As you may know, most current browsers are <a href="http://www.openajax.org/runtime/wiki/The_Two_HTTP_Connection_Limit_Issue">limited to 2 concurrent requests per domain</a>. Therefore, the OpenZoom description format has support for defining multiple URLs for the same data. A client which supports the format is then able to concurrently fetch more than 2 image tiles at the same time. This technique is applied by most large map providers such as Google Maps and Microsoft Virtual Earth.</p>
<p><strong>Example</strong></p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">â€¦
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;level</span> <span style="color: #000066;">index</span>=<span style="color: #ff0000;">&quot;11&quot;</span> <span style="color: #000066;">width</span>=<span style="color: #ff0000;">&quot;524288&quot;</span> <span style="color: #000066;">height</span>=<span style="color: #ff0000;">&quot;524288&quot;</span> <span style="color: #000066;">columns</span>=<span style="color: #ff0000;">&quot;2048&quot;</span> <span style="color: #000066;">rows</span>=<span style="color: #ff0000;">&quot;2048&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://t0.foo.com/11/{column}/{row}.png&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://t1.foo.com/11/{column}/{row}.png&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://t2.foo.com/11/{column}/{row}.png&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;uri</span> <span style="color: #000066;">template</span>=<span style="color: #ff0000;">&quot;http://t3.foo.com/11/{column}/{row}.png&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/level<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
â€¦</pre></div></div>

<p><br/><br />
<strong>Ease of Implementation</strong><br />
Since the OpenZoom description format is very explicit (and therefore verbose), implementing a client to read it is very, very simple. Unlike Deep Zoom and Zoomify where the client has to do a considerable amount of work to compute the properties of the image pyramid, with the OpenZoom description format this work basically boils down to mapping the properties of the descriptor into the internal representation of a multi-scale image description.</p>
<p>In my opinion, the single biggest advantage of the OpenZoom description format is that a client that can read the format does not need to understand the algorithms that created the image pyramids which the format itself describes. This way we can totally decouple the producer of an image pyramid from its ultimate client.</p>
<p>If you are interested in getting an idea of how all of this works, I suggest you take a look at the following classes in the <a href="http://code.google.com/p/open-zoom/">OpenZoom source code repository</a>: <a href="http://code.google.com/p/open-zoom/source/browse/trunk/src/main/flash/org/openzoom/flash/descriptors/zoomify/ZoomifyDescriptor.as">ZoomifyDescriptor</a>, <a href="http://code.google.com/p/open-zoom/source/browse/trunk/src/main/flash/org/openzoom/flash/descriptors/deepzoom/DZIDescriptor.as">DZIDescriptor</a> and <a href="http://code.google.com/p/open-zoom/source/browse/trunk/src/main/flash/org/openzoom/flash/descriptors/openzoom/OpenZoomDescriptor.as">OpenZoomDescriptor</a>.</p>
<h2>Conclusion</h2>
<p>I hope this overview of the three multi-scale image description formats gave you an idea on what problems each one of them is trying to solve and how well they succeed in doing that. When designing the <a href="http://openzoom.org/specs/">OpenZoom description format</a>, my intention was certainly not to create <em>yet another description format</em>. It simply tackles the issues of multi-scale image formats from a different angle. Doing that, it turned out to be quite powerful in representing all kinds of multi-scale images out there, including the two big ones: Deep Zoom and Zoomify. More importantly, the OpenZoom description format offers a way to describe a vast amount of all multi-scale image out there under a single specification.</p>
<p>That being said, the <a href="http://openzoom.org/">OpenZoom framework</a> itself, which strives to be the most open, most flexible platform for multi-scale images and Zoomable User Interfaces out there, obviously supports all of the formats discussed here equally well.</p>
<p>I hope you've enjoyed this <em>behind the scenes</em> of the OpenZoom description format. At some point, I will show you an idea I've been working that involves these multi-scale image descriptors. Until then, have a look at the links in the <a href="#further-reading">Further Reading</a> section as there are some hidden gems.</p>
<p class="footnote"><em>Disclaimer: All details of the OpenZoom description format are subject to change. Feature requests and opinions are welcome. As usual, feel free to leave a comment.</em></p>
<h3>Acknowledgement</h3>
<p>At this point, I'd like to thank my buddy <a href="http://424f.com/blog/">Boris</a> who unbeknownst to him, through our many very valuable discussions, considerably shaped the current form of the <a href="http://openzoom.org/specs/">OpenZoom description format specification</a>. Believe me when I say that without him the format would have most certainly been <acronym title="Yet Another (Damn) Multi-Scale Image Description Format">YAMSIDF.</acronym></p>
<h3>Footnotes</h3>
<p class="footnote"><a name="footnote-1-3">[1 &amp; 3]</a> If you&#8217;d like to get some more background on this topic, I wrote an <a href="http://gasi.ch/blog/inside-deep-zoom-1/">introduction to multi-scale imaging</a> and another article about the <a href="http://gasi.ch/blog/inside-deep-zoom-2/">mathematical properties of an image pyramid</a> using Microsoft&#8217;s Deep Zoom as an example.</p>
<p class="footnote"><a name="footnote-2">[2]</a> From my own experience, I know that there are unfortunately still people out there who think that there is some magic going on behind multi-scale imaging. To set this straight, if you&#8217;ve used any of the following, <a href="http://maps.google.com/">Google&nbsp;Maps</a>, <a href="http://maps.yahoo.com/">Yahoo&nbsp;Maps</a>, <a href="http://maps.live.com/">Microsoft Virtual&nbsp;Earth</a>, <a href="http://livelabs.com/blog/seadragon/silverlight-2-deep-zoom/">Silverlight Deep&nbsp;Zoom</a>, <a href="http://livelabs.com/seadragon-ajax/">Seadragon&nbsp;AJAX</a>, <a href="http://livelabs.com/seadragon-mobile/">Seadragon Mobile</a> or <a href="http://zoomify.com/">Zoomify</a>,<sup><a href="#footnote-4">4</a></sup> you should know that all of them basically work the same, namely with <em>off the shelf</em> JPEG or PNG image files. These files are stored either on disk or in a database. Once requested, they are sent to and rendered on the client which in the previous examples is either the browser, the Flash or Silverlight plugin or the iPhone.<br />
But you might ask: <em>What about JPEG 2000?</em> Indeed, there are some possible candidates for image file formats out there which would bring better support for multi-scale imaging in the future. Two of them being <a href="http://en.wikipedia.org/wiki/JPEG_2000">JPEG 2000</a> and <a href="http://en.wikipedia.org/wiki/HD_Photo">HD Photo</a>. We won&#8217;t see significant adoption of the first anytime soon because of <a href="http://en.wikipedia.org/wiki/JPEG_2000#Legal_issues">legal issues</a> such as <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=36351">this one</a>. <a href="http://blogs.msdn.com/billcrow/archive/2006/11/17/introducing-hd-photo.aspx">HD&nbsp;Photo originated at Microsoft</a> and is being considered as successor to the JPEG standard dubbed JPEG XR. Again, widespread use won&#8217;t happen overnight.</p>
<p class="footnote"><a name="footnote-4">[4]</a> <em>By the way, <a href="http://openzoom.org/">OpenZoom</a> supports most of these out of the box.</em></p>
<p class="footnote"><a name="footnote-5">[5]</a> In <a href="http://gasi.ch/blog/inside-deep-zoom-2/">Inside Deep Zoom 2</a> I&#8217;ve explained the concept of <em>tile overlap</em>.</p>
<h3><a name="further-reading">Further Reading</a></h3>
<ul>
<li>Wikipedia: <a href="http://en.wikipedia.org/wiki/JPEG_2000">JPEG 2000</a></li>
<li>Wikipedia: <a href="http://en.wikipedia.org/wiki/HD_Photo">HD Photo</a></li>
<li><a href="http://blogs.msdn.com/billcrow/archive/2006/10/20/msu-evaluates-windows-media-photo-vs-jpeg-2000.aspx">HD Photo (formerly Windows Media Photo) vs JPEG 2000</a></li>
<li><a href="http://blogs.msdn.com/billcrow/archive/2006/11/20/photosynth.aspx">Photosynth</a> <em>&mdash;<a href="http://twitter.com/billcrow/">Bill Crow</a> gives us an excellent behind the scenes of an early preview of Photosynth and how it leverages HD&nbsp;Photo.</em></li>
<li>Microsoft MSDN: <a href="http://msdn.microsoft.com/en-us/library/cc645077(VS.95).aspx">Deep Zoom File Format Overview</a></li>
<li><a href="http://dragonosticism.wordpress.com/2008/12/11/deepzoomtoolsdll/">Dragonosticism: DeepZoomTools.dll</a> <em>&mdash; Develop your own tools for creating Deep Zoom images.</em></li>
<li><a href="http://blog.kapilt.com/2008/11/30/sharing-large-images-openlayers-gsiv-modestmaps-deepzoom-and-python/">Viewing Large Images &#8211; OpenLayers, GSIV, ModestMaps, DeepZoom, and Python</a> <em>&mdash; Create Deep Zoom Images on Windows, Mac and Linux with <a href="http://www.python.org/">Python</a> and <a href="http://www.pythonware.com/products/pil/">PIL</a>.</em></li>
<li><a href="http://8ninths.com/?p=487">Enter the Seadragon</a> <em>&mdash; Introduction to Seadragon and multi-scale imaging.</em></li>
<li><a href="http://www.iangilman.com/blog/2008/12/seadragon-on-your-iphone.php">Seadragon On Your iPhone</a> <em>&mdash; The story of Seadragon Mobile by Ian Gilman, one of the Seadragon team members.</em></li>
<li><a href="http://blogs.msdn.com/lutzg/archive/2008/11/23/seadragon-ajax-and-deep-zoom.aspx">Seadragon AJAX &amp; Deep Zoom</a> <em>&mdash; Comparison of the two implementations by  Lutz Gerhard, a LiveLabs product manager.</em></li>
<li><a href="http://www.zoomify.com/express.htm">Zoomifyer EZ</a> <em>&mdash; Create Zoomify images for free on your Mac and PC.</em></li>
<li><a href="http://www.zoomify.com/photoshop.htm">Zoomify Photoshop</a> <em>&mdash; Create Zoomify images with <a href="http://www.adobe.com/products/photoshop/photoshop/">Adobe Photoshop</a>.</em></li>
</ul>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/MLyH1s91LA8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/openzoom-description-format/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/openzoom-description-format/</feedburner:origLink></item>
		<item>
		<title>MultiScaleImage: Flex Deep Zoom Component</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/dtWRJhHjmtg/</link>
		<comments>http://gasi.ch/blog/flex-multiscaleimage-component/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 04:16:15 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[deepzoom]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[multiscale]]></category>
		<category><![CDATA[multiscaleimage]]></category>
		<category><![CDATA[openzoom]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[zoomify]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=476</guid>
		<description><![CDATA[Ever since I published my proof of concept of Deep Zoom in Flash, many people from around the world got in touch with me and told me that they also wanted to play around with this technology. Therefore, for a couple of months now, I&#8217;ve been working on an SDK for ZUIs and multi-scale images [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since I published my proof of concept of <a href="http://gasi.ch/blog/inside-deep-zoom-3/">Deep Zoom in Flash</a>, many people from around the world got in touch with me and told me that they also wanted to play around with this technology. Therefore, for a couple of months now, I&#8217;ve been working on an <acronym title="Software Development Kit">SDK</acronym> for <acronym title="Zoomable User Interface">ZUIs</acronym> and multi-scale images for Flash called <a href="http://openzoom.org/">OpenZoom</a>. The SDK is still <em>work in progress</em> and I won&#8217;t focus on it today. However, I promise you it will definitely be topic of many posts in the future.</p>
<p>Today I&#8217;d like to share with you a first preview of the <a href="http://docs.openzoom.org/sdk/org/openzoom/flex/components/MultiScaleImage.html">MultiScaleImage component</a> that I&#8217;ve built on top of the <a href="http://openzoom.org/">OpenZoom SDK</a>.</p>
<blockquote class="flash">
<h2>Introducing the OpenZoom SDK</h2>
<p>This stuff is really old and is only kept around here for archival purposes. Get the latest news and the first public release of the <a href="http://gasi.ch/blog/openzoom-sdk">OpenZoom SDK</a> in the <a href="http://gasi.ch/blog/openzoom-sdk">official announcement</a>.
</p></blockquote>
<h2>Nomen Est Omen</h2>
<p>MultiScaleImage? Sounds familiar? Well indeed, it is the same name Microsoft uses for their <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.multiscaleimage(VS.95).aspx">Deep Zoom Silverlight control</a>. In spirit, the <a href="http://docs.openzoom.org/sdk/org/openzoom/flex/components/MultiScaleImage.html">Flex MultiScaleImage component</a> I&#8217;ve built and its Silverlight counterpart are very close. How close? Well, let&#8217;s look at a fictional code listing:</p>
<blockquote class="info">
<h2>Code: Silverlight vs Flex</h2>
<p>Microsoft Silverlight</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;MultiScaleImage</span> <span style="color: #000066;">x:Name</span>=<span style="color: #ff0000;">&quot;image&quot;</span> <span style="color: #000066;">Source</span>=<span style="color: #ff0000;">&quot;foo/bar.xml&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>Adobe Flex</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;openzoom:MultiScaleImage</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;image&quot;</span> <span style="color: #000066;">source</span>=<span style="color: #ff0000;">&quot;foo/bar.xml&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

</blockquote>
<h2>Under the Hood</h2>
<p>As much as the two look alike from the outside, they differ very much under the hood. Microsoft&#8217;s MultiScaleImage control is a native control of the Silverlight runtime and therefore has a very efficient implementation. On the contrary, the <a href="http://docs.openzoom.org/sdk/org/openzoom/flex/components/MultiScaleImage.html">Flex MultiScaleImage</a> component is built on top of ActionScript 3. Nonetheless, I am very pleased with the performance, considering I haven&#8217;t spent much time on tuning it yet.</p>
<p>Even though I can praise Microsoft for their Deep Zoom implementation, I dare to say they didn&#8217;t do their homework on <acronym title="Application Programming Interface">API</acronym> design. Shortly after Deep Zoom was introduced to the public with the fantastic <a href="http://memorabilia.hardrock.com/">Hard Rock Memorabilia</a> showcase by <a href="http://www.vertigo.com/">Vertigo</a>, dozens of bloggers wrote posts about how to program the Silverlight MultiScaleImage control to create something that somewhat comes close to the Hard Rock site. It was hard because the <acronym title="Application Programming Interface">API</acronym> is cumbersome and confusing. I&#8217;d speculate this is one of the reasons we haven&#8217;t seen a lot more inspiring Deep Zoom work since.</p>
<p>Flexibility, a <a href="http://docs.openzoom.org/sdk/org/openzoom/flex/components/MultiScaleImage.html">powerful API</a> and ease of use were the top priorities for my implementation of the MultiScaleImage component for Flex. Whether I&#8217;ve achieved my goals, I am eagerly waiting to hear from you.</p>
<h2>Batteries Included</h2>
<p>As the title of the article suggests, the Flex MultiScaleImage component has built-in support for <a href="http://msdn.microsoft.com/en-us/library/cc645050(VS.95).aspx">Deep Zoom</a> images. But not only that, it also comes with native support for <a href="http://zoomify.com/">Zoomify</a> and <a href="http://openzoom.org/specs/">OpenZoom</a> images without you having to write one line of code. The latter is a new multi-scale image description format I&#8217;ve designed and will probably discuss another time.</p>
<p>To keep things clear, there is one thing that the Silverlight MultiScaleImage control supports that I do not (yet) support: Collections. Personally, I think this is one of the cases where it&#8217;s misleading that a MultiScaleImage (singular!) supports collections of images and suddenly has subimages. Therefore, once this functionality will be part of the OpenZoom SDK, it most certainly will have its own component.</p>
<p>In order to prevent a similiar incident to Silverlight&#8217;s introduction of their MultiScaleImage component where <a href="http://www.wintellect.com/CS/blogs/jprosise/archive/2008/03/18/mousewheel-zooms-in-silverlight-2-0.aspx">bloggers</a> <a href="http://www.hanselman.com/blog/TheWeeklySourceCode18DeepZoomSeadragonSilverlight2MultiScaleImageMouseWheelZoomingAndPanningEdition.aspx">around</a> <a href="http://silverlight.net/blogs/msnow/archive/2008/07/29/tip-of-the-day-23-how-to-capture-the-mouse-wheel-event.aspx">the</a> <a href="http://blogs.msdn.com/jaimer/archive/2008/03/31/a-deepzoom-primer-explained-and-coded.aspx">world</a> had to write how to add mouse and keyboard navigation to Deep Zoom, I&#8217;ve architected the Flex component in a way that has plug&nbsp;&amp;&nbsp;play support for this kind of functionality which is a nice application of the <a href="http://en.wikipedia.org/wiki/Strategy_pattern">Strategy Pattern</a>.</p>
<h2>Getting Started</h2>
<p>I could go on and on about how the Flex MultiScaleImage component works but instead I&#8217;ve prepared three demos that let you interactively explore the three core concepts of the component, namely <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/transformers/package-detail.html">transformers</a>, <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/controllers/package-detail.html">controllers</a> and <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/constraints/package-detail.html">constraints</a>.</p>
<blockquote class="info">
<h2>Demo #1: Transformers</h2>
<p>The transformer controls the animation of the viewport. Currently, I&#8217;ve implemented one controller, <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/transformers/TweenerTransformer.html">TweenerTransformer</a>, that is based on the fantastic <a href="http://tweener.googlecode.com/">Tweener</a> animation library. Check out the demo to see how flexible the architecture is and how easily you can customize the animation of MultiScaleImage. You want to know what&#8217;s also great about transformers? If for whatever reason you don&#8217;t need them, you don&#8217;t pay a single kilobyte penalty for an animation library that is never used.</p>
<p><a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/transformers/" title="Flex MultiScaleImage Transformers Demo"><img src="http://farm4.static.flickr.com/3159/3090848151_e68b462ebc.jpg" width="500" height="300" /></a></p>
<p><a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/transformers/">View Demo</a> | <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/">View Source</a>
</p></blockquote>
<blockquote class="info">
<h2>Demo #2: Controllers</h2>
<p>Controllers are the glue between user input and viewport control. The <a href="http://openzoom.org/">OpenZoom SDK</a> features two implementations of controllers at this point, namely a <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/controllers/MouseController.html">MouseController</a> and a <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/controllers/KeyboardController.html">KeyboardController</a>. Both have already built-in support for quite some customization but if you need more, feel free to implement your own controller based on <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/IViewportController.html">IViewportController</a>.</p>
<p><a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/controllers/" title="Flex MultiScaleImage Controllers Demo"><img src="http://farm4.static.flickr.com/3220/3090848513_70f2a74735.jpg" width="500" height="300"/></a></p>
<p><a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/controllers/">View Demo</a> | <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/">View Source</a>
</p></blockquote>
<blockquote class="info">
<h2>Demo #3: Constraints</h2>
<p>The constraint controls what states the viewport can reach. Don&#8217;t want people to zoom out too much? Just add a <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/constraints/ZoomConstraint.html">ZoomConstraint</a> and set minimum and maximum zoom. Don&#8217;t want them to lose the scene out of sight? Add a <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/constraints/VisibilityConstraint.html">VisibilityConstraint</a>. Doesn&#8217;t the component only support a single constraint? Yes, but the architecture is flexible enough to allow you to combine constraints in a <a href="http://docs.openzoom.org/sdk/org/openzoom/flash/viewport/constraints/CompositeConstraint.html">CompositeConstraint</a> which is an application of the <a href="http://en.wikipedia.org/wiki/Composite_pattern">Composite Design Pattern</a>.</p>
<p><a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/constraints/" title="Flex MultiScaleImage Constraints Demo"><img src="http://farm4.static.flickr.com/3270/3090847691_b2b3725fff.jpg" width="500" height="300"/></a></p>
<p><a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/constraints/">View Demo</a> | <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/">View Source</a>
</p></blockquote>
<blockquote class="info">
<h2>Demo #3&frac12;: Out of the Box</h2>
<p>After having experienced all the advanced features of the component, let&#8217;s sit back and enjoy the elegance and purity of the MultiScaleImage component as it comes out of the box. In its plain form, a MultiScaleImage has only one purpose: Displaying images tack sharp no matter how big they appear on the screen. Try for yourself, click on the picture to go to the demo and there just keep on resizing your browser window and enjoy the beauty of simplicity how the image slowly appears sharper and sharper.</p>
<p><a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/out-of-the-box/" title="Flex MultiScaleImage Out of the Box Demo" target="_blank"><img src="http://farm3.static.flickr.com/2074/1572001177_f2b1783b09.jpg" width="500" height="375" /></a></p>
<p><a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/out-of-the-box/">View Demo</a> | <a href="http://gasi.ch/examples/2008/12/08/flex-multiscaleimage-component/source/">View Source</a>
</p></blockquote>
<h2>Download</h2>
<p>If you&#8217;d like to play around with this component, please <a href="http://openzoom.org/sdk/download/latest/zip/">download the OpenZoom SDK (ZIP)</a>. If you want to find out more, I recommend you to read the <a href="http://docs.openzoom.org/sdk/">OpenZoom SDK API documentation</a> and if you feel particularly adventureous, take a look at the <a href="http://openzoom.org/go/code/">source code.</a></p>
<p>In case you have questions, feedback or you&#8217;ve found a bug, feel free to leave a comment down below or file a bug report at the <a href="http://openzoom.org/go/issues/">OpenZoom Bug Tracking System</a>.</p>
<p>Today, I&#8217;ve barely scratched the surface of what&#8217;s possible with the OpenZoom Flex MultiScaleImage component.  In case you have suggestions for topics you would like me to talk more about, again, just leave a comment and I&#8217;ll see what I can do.</p>
<p>I can&#8217;t wait to see what you create with it. If you have a demo with the MultiScaleImage component, post a comment with a link to your demo.</p>
<h3 style="font-size:100%">Disclaimer</h3>
<p><span style="font-size:85%">This is a preview release. Performance has not been optimized yet. All parts of the component, in particular the API are subject to change.</span></p>
<h3 style="font-size:100%">License</h3>
<p><span style="font-size:85%">The <a href="http://openzoom.org/">OpenZoom SDK</a> is licensed under the <a href="http://www.mozilla.org/MPL/MPL-1.1.html">MPL 1.1</a>/<a href="http://www.gnu.org/licenses/gpl.html">GPL 3</a>/<a href="http://www.gnu.org/licenses/lgpl.html">LGPL 3</a> trilicense.</span></p>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/dtWRJhHjmtg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/flex-multiscaleimage-component/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/flex-multiscaleimage-component/</feedburner:origLink></item>
		<item>
		<title>Inside Deep Zoom – Part III: Deep Zoom in Flash</title>
		<link>http://feedproxy.google.com/~r/gasi/rtfm/~3/eP64oQHRU68/</link>
		<comments>http://gasi.ch/blog/inside-deep-zoom-3/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 22:52:57 +0000</pubDate>
		<dc:creator>Daniel Gasienica</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[ZUI]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[deep]]></category>
		<category><![CDATA[deepzoom]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[multiscale]]></category>
		<category><![CDATA[multiscaleimaging]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[zoom]]></category>
		<category><![CDATA[zooming]]></category>

		<guid isPermaLink="false">http://gasi.ch/blog/?p=402</guid>
		<description><![CDATA[Welcome back to part three of Inside Deep Zoom. Well, I actually didn&#x27;t plan to post this tonight but I just got home and found out that tomorrow, Microsoft will officially ship Silverlight 2 along with its acclaimed Deep Zoom technology which&#8230;
&#8230;enables unparalleled interactivity and navigation of ultra-high resolution imagery.
History
As the previous articles and the [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome back to part three of <em>Inside Deep Zoom</em>. Well, I actually didn&#x27;t plan to post this tonight but I just got home and found out that tomorrow, Microsoft will <a href="http://micromiel.com/2008/10/13/silverlight-2-ships/">officially ship Silverlight 2</a> along with its acclaimed Deep Zoom technology which&hellip;<br />
<q>&hellip;enables unparalleled interactivity and navigation of ultra-high resolution imagery.</q></p>
<h2>History</h2>
<p>As the previous articles and the title of this one already hinted it, I did implement Deep Zoom in Adobe Flash. The viewer I&#8217;ve built reads standard, unmodified Deep Zoom images directly from Deep Zoom Composer. It turns out, the idea was born when I was doing my internship at <a href="http://zoomorama.com/">Zoomorama</a> and I was tasked to work on multi-scale image rendering. One night at my apartment, I was taking a closer look at Deep Zoom and realized that it works quite similarly and could be easily implemented on top of the work we did at Zoomorama. The very next day, I talked to our people about it and their reaction was very positive. Another twenty-four hours later, I had a working proof-of-concept for rendering Deep Zoom images inside our own viewer. At this point, I&#x27;d like to thank my incredible developer teammates David, Olivier &amp; Eric for being part of making this possible.</p>
<h2>Deep Zoom in Flash</h2>
<p>What you are about to see, is one set of original Deep Zoom images (fresh out of Deep Zoom Composer) that runs both inside Flash as well as Silverlight. Going into all the implementation details and the implications of this will probably warrant another blog post. However, I think it&#x27;s interesting to note that with the work I did, we now have a working solution for creating the same kind of experiences Deep Zoom enables on Microsoft Silverlight, but instead running on Adobe Flash.</p>
<p>What does this mean? First, the reach you get with Flash is massively bigger than what you get with Silverlight. Think about it, when Silverlight 2 ships tomorrow it&#x27;s market share starts at basically zero. Considering that Flash player 9 has something close to 98% market penetration, this is a big deal. </p>
<p><em>On a side note, if I wouldn&#x27;t be kept busy with all these ETH projects, Deep Zoom would have been out for weeks before the official launch of Silverlight 2 on a platform that is mature and has an order of magnitude higher reach.</em></p>
<p>Second, unlike Deep Zoom in Silverlight, Deep Zoom in Flash doesn&#x27;t crash Firefox on my Mac. Enough said, see for yourself.</p>
<blockquote class="info">
<h2>Navigation</h2>
<p><strong>Click to zoom in</strong> and <strong>shift-click to zoom out</strong> on the picture. <strong>Drag &amp; drop to pan</strong>. The Flash viewer supports <strong>fullscreen</strong> mode with the keyboard shortcut <strong>F</strong> or by right-clicking and choosing <em>Fullscreen</em> in the context menu. Other ways to navigate are also found in the context menu.
</p></blockquote>
<blockquote class="info">
<h2>Sample #1 &ndash; Mont Saint Michel</h2>
<p><a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/mont-saint-michel/flash/"><img src="http://farm4.static.flickr.com/3011/2933175032_8d570e7e51.jpg" width="500" height="334" alt="Mont Saint Michel" /></a><br />
<a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/mont-saint-michel/flash/">View in Flash</a> | <a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/mont-saint-michel/silverlight">View in Silverlight Deep Zoom</a> | <a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/mont-saint-michel/mont-saint-michel.jpg">View Original Image</a>
</p></blockquote>
<blockquote class="info">
<h2>Sample #2 &ndash; Billions</h2>
<p><a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/billions/flash/"><img src="http://farm1.static.flickr.com/200/441355880_94f96bcd5d.jpg" width="500" height="334" alt="Billions &amp; Billions Served." /></a><br />
<a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/billions/flash/">View in Flash</a> | <a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/billions/silverlight">View in Silverlight Deep Zoom</a> | <a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/billions/billions.jpg">View Original Image</a>
</p></blockquote>
<blockquote class="info">
<h2>Sample #3 &ndash; Deux Femmes</h2>
<p><a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/deux-femmes/flash/"><img src="http://farm3.static.flickr.com/2084/2101923518_c021e4766f_b.jpg" width="500" height="746" alt="Deux Femmes" /></a><br />
<a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/deux-femmes/flash/">View in Flash</a> | <a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/deux-femmes/silverlight/">View in Silverlight Deep Zoom</a> | <a href="http://gasi.ch/examples/2008/10/13/inside-deep-zoom/deux-femmes/deux-femmes.jpg">View Original Image</a>
</p></blockquote>
<h2>Addendum</h2>
<p>The Flash viewer for viewing Deep Zoom images is still work in progress and therefore you might experience certain jerkiness when navigating around. It is based on a codebase I wrote from the ground up. So far in this blog, I&#x27;ve not only written about things I experimented with but usually also released the source code that goes along with it. This should not be an exception, however, the code is not ready for public consumption and therefore I kindly ask you to keep an eye on this blog for future announcements. </p>
<p>Although I agree mostly with the statement that <a href="http://theflashblog.com/?p=351">Silverlight Deep Zoom is Nothing New for Flash</a> (one could go one step further by saying <em>Silverlight Deep Zoom is Nothing New</em>), I must give credits to the Seadragon team for their innovative &amp; engaging implementation that revived the interest in zooming as a very powerful concept.</p>
<p>Even though the Adobe Flash Platform is still my preferred development platform, I am very happy about the competition Microsoft brought with Silverlight or Sun, Apple &amp; Curl with their respective RIA technologies. I realized this more then ever when I compared Silverlight Deep Zoom to my own implementation on top of the Flash Player. Therefore, I&#x27;d like to take this opportunity to petition Adobe for the following two matters:</p>
<blockquote class="info">
<h2>Adobe Petition #1: <br/>Native Mouse Wheel Support on Mac OS X</h2>
<p>Adobe touts the Flash Player as leading example for a <em>cross-platform</em> development environment. According to this <a href="http://onflash.org/ted/2008/03/defining-cross-platform.php">article by Ted Patrick</a>, an Adobe Evangelist, <strong>cross-platform</strong> is defined as follows:</p>
<p><strong>Across operating systems and web browsers:</strong></p>
<ul>
<li><strong>Identical APIs (classes, methods, properties, types, and return values)</strong></li>
<li><strong>Identical API behavior</strong></li>
<li><strong>Similar performance</strong></li>
<li><strong>Similar installation experience</strong></li>
</ul>
<p>As long as we don&#x27;t have multi-touch screens available everywhere, the mouse wheel or <em>scrolling</em> is one of the most powerful input gestures for Zoomable User Interfaces.</p>
<p>It&#x27;s 2008 and the Flash Player still does not allow you to natively listen for mouse wheel events on the Macintosh. Adobe, please fix this <a href="http://www.imdb.com/title/tt0151804/quotes#qt0386876"><em>glitch</em></a>.
</p></blockquote>
<blockquote class="info">
<h2>Adobe Petition #2: <br/>Support for a Background Thread</h2>
<p>As you play around with the Deep Zoom samples in Flash you&#x27;ll sometimes notice jerkiness in the zooming and panning while the movement should be very smooth. Although there is still a lot of room for optimization that can be done on my part, from my observations, the root cause that is responsible for this jerkiness is when the Flash Player is handling network traffic (when fetching tiles) and doing zooming or panning animations at the same time.</p>
<p>From my research I&#x27;ve gathered that Microsoft&#x27;s Silverlight supports <a href="http://msdn.microsoft.com/en-us/library/cc221403(VS.95).aspx">Background Workers</a>, a way to run time-consuming tasks on a background thread. I believe a similar mechanism on the Flash Player would allow me to handle network traffic on a background thread while the UI smoothly animates. This is an advanced feature but the Flash Platform is slowly maturing and exposing such mechanisms to developers has to considered.</p>
</blockquote>
<h3>Photography</h3>
<p>The photos <em><a href="http://flickr.com/photos/gasi/2933175032/">Mont Saint Michel</a></em>, <em><a href="http://flickr.com/photos/gasi/441355880/">Billions</a></em> &amp; <em><a href="http://flickr.com/photos/gasi/2101923518/">Deux Femmes</a></em> were all taken by me. If you&#x27;d like to see more, I suggest you to check out <a href="http://flickr.com/photos/gasi/">my Flickr stream</a>. All three photos are published under a <a href="http://creativecommons.org/licenses/by-nc-nd/2.0/">Creative Commons Attribution-Noncommercial-No Derivative Works</a> license.</p>
<img src="http://feeds.feedburner.com/~r/gasi/rtfm/~4/eP64oQHRU68" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://gasi.ch/blog/inside-deep-zoom-3/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		<feedburner:origLink>http://gasi.ch/blog/inside-deep-zoom-3/</feedburner:origLink></item>
	</channel>
</rss>
