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

<channel>
	<title>Mobile UI Experiences</title>
	<atom:link href="http://blog.rafols.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.rafols.org</link>
	<description>Mobile app development</description>
	<pubDate>Sun, 25 Jul 2010 23:43:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Augmented Reality - I</title>
		<link>http://blog.rafols.org/?p=88</link>
		<comments>http://blog.rafols.org/?p=88#comments</comments>
		<pubDate>Sun, 25 Jul 2010 23:43:05 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[Augmented Reality]]></category>

		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=88</guid>
		<description><![CDATA[Since I had my first android phone I got curiosity into augmented reality. I have to say, compared to j2me, android is a lot more powerful and you get surprised about how easy is to achieve some things than in j2me are near impossible or rather complicated. Also seems that AR is some kind of [...]]]></description>
			<content:encoded><![CDATA[<p>Since I had my first android phone I got curiosity into augmented reality. I have to say, compared to j2me, android is a lot more powerful and you get surprised about how easy is to achieve some things than in j2me are near impossible or rather complicated. Also seems that AR is some kind of teenager fashion, now it&#8217;s really cool to do things in AR instead of just showing a map with POIs. Let&#8217;s have the POIs floating around the user, even if it&#8217;s more confusing than showing a map, but, hey! it&#8217;s cooler.</p>
<p>Anyway, I had to try it by myself, otherwise I couldn&#8217;t apply the cliché of having an android phone and did some AR tests. I&#8217;ll introduce the engine I developed with different articles, explaining few parts of it, and if anyone is interested I can provide access to the svn server where the code is stored (send me an email to raimon.rafols [a] gmail.com). You can use this code for any non-commercial project you want but you need the written permission of the author for commercial usage.</p>
<p>One of the basic parts needed for an AR engine is to know the exact location and orientation of the device. Otherwise it won&#8217;t be possible to show the correct POIs and in the correct position in the screen. Here is a code snippet of the orientation provider.</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">package</span> <span class="co2">com.fuzzion.argine.hal.android</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">java.util.ArrayList</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">java.util.Collections</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">java.util.List</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">android.app.Activity</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">android.content.Context</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">android.hardware.Sensor</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">android.hardware.SensorEvent</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">android.hardware.SensorEventListener</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">android.hardware.SensorManager</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">android.util.Log</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">com.fuzzion.argine.engine.OrientationListener</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="co2">com.fuzzion.argine.hal.OrientationProvider</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">class</span> AndroidOrientationProvider <span class="kw1">implements</span> OrientationProvider, SensorEventListener <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> SensorManager sManager<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> List<span class="sy0">&lt;</span>OrientationListener<span class="sy0">&gt;</span> listeners<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> AndroidOrientationProvider<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; listeners <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Acollections+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Collections</span></a>.<span class="me1">synchronizedList</span><span class="br0">&#40;</span><span class="kw1">new</span> ArrayList<span class="sy0">&lt;</span>OrientationListener<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> onAccuracyChanged<span class="br0">&#40;</span>Sensor sensor, <span class="kw4">int</span> accuracy<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> onSensorChanged<span class="br0">&#40;</span>SensorEvent event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">float</span> values<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> event.<span class="me1">values</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span>event.<span class="me1">sensor</span>.<span class="me1">getType</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> Sensor.<span class="me1">TYPE_ACCELEROMETER</span><span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> Sensor.<span class="me1">TYPE_ORIENTATION</span><span class="sy0">:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span>OrientationListener listener <span class="sy0">:</span> listeners<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; listener.<span class="me1">directionChanged</span><span class="br0">&#40;</span>values<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> registerOrientationListener<span class="br0">&#40;</span>OrientationListener listener<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; listeners.<span class="me1">add</span><span class="br0">&#40;</span>listener<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @Override</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> removeOrientationListener<span class="br0">&#40;</span>OrientationListener listener<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; listeners.<span class="me1">remove</span><span class="br0">&#40;</span>listener<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> start<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Activity act <span class="sy0">=</span> AndroidPlatform.<span class="me1">getActivity</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sManager <span class="sy0">=</span> <span class="br0">&#40;</span>SensorManager<span class="br0">&#41;</span> act.<span class="me1">getSystemService</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Acontext+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Context</span></a>.<span class="me1">SENSOR_SERVICE</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sManager.<span class="me1">registerListener</span><span class="br0">&#40;</span><span class="kw1">this</span>, sManager.<span class="me1">getDefaultSensor</span><span class="br0">&#40;</span>Sensor.<span class="me1">TYPE_ORIENTATION</span><span class="br0">&#41;</span>, SensorManager.<span class="me1">SENSOR_DELAY_FASTEST</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">void</span> stop<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>sManager <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sManager.<span class="me1">unregisterListener</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>In the next entry I&#8217;ll explain the integration of all the parts (camera, orientation and position). Meanwhile you can check the code in svn.</p>
<p><img src="http://labs.rafols.org/img.php?id=ar1-post" alt=""/></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=88</wfw:commentRss>
		</item>
		<item>
		<title>Service2Media is hiring!</title>
		<link>http://blog.rafols.org/?p=73</link>
		<comments>http://blog.rafols.org/?p=73#comments</comments>
		<pubDate>Mon, 26 Apr 2010 19:12:11 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[Enschede]]></category>

		<category><![CDATA[service2media]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=73</guid>
		<description><![CDATA[Service2Media is looking for experienced developers to extend our development team in Enschede
These are the positions currently available:
Senior Java Developers
   -    Candidates must have expertise in web server technology, in-depth Java knowledge on Linux platforms
   -    Speaks and writes English fluently
   -  [...]]]></description>
			<content:encoded><![CDATA[<p>Service2Media is looking for experienced developers to extend our development team in <a href="http://maps.google.com/maps?f=q&#038;source=s_q&#038;hl=en&#038;geocode=&#038;q=enschede,nl&#038;sll=37.0625,-95.677068&#038;sspn=62.99906,135.263672&#038;ie=UTF8&#038;hq=&#038;hnear=Enschede,+Overijssel,+The+Netherlands&#038;z=12">Enschede</a></p>
<p>These are the positions currently available:</p>
<p><strong>Senior Java Developers</strong><br />
   -    Candidates must have expertise in web server technology, in-depth Java knowledge on Linux platforms<br />
   -    Speaks and writes English fluently<br />
   -    Have a BSc or MSc degree in computer science or a related subject<br />
   -    Experienced in J2ME, J2EE, Glassfish, JMX, SQL and XML<br />
   -    Experience with Linux, Tomcat, Apache and memcached<br />
   -    Experience with SVN, TRAC, Mantis and Eclipse.<br />
   -    Experience with Google protocol buffers<br />
   -    Have at least 3 years of relevant programming experience<br />
   -    Focused on end to end experience.</p>
<p><strong>Windows Mobile Developers</strong><br />
   -    Candidates must have expertise in developing native applictions on WM 6.x<br />
   -    Speaks and writes English fluently.<br />
   -    Have a BSc or MSc degree in computer science or a related subject.<br />
   -    Experienced in Windows Mobile 6.x, SQL and XML.<br />
   -    Experience with SVN, TRAC, Mantis and Eclipse.<br />
   -    Experience with Google protocol buffers<br />
   -    Have at least 3 years of relevant programming experience<br />
   -    Focused on end to end experience.</p>
<p><strong>Symbian Developers</strong><br />
   -    Candidates must have expertise in developing native Symbian applications<br />
   -    Speaks and writes English fluently<br />
   -    Have a BSc or MSc degree in computer science or a related subject<br />
   -    Experienced in Symbian C++ development, SQL and XML<br />
   -    Experience with SVN, TRAC, Mantis and Eclipse<br />
   -    Experience with Google protocol buffers<br />
   -    Have at least 3 years of relevant programming experience<br />
   -    Focused on end to end experience.</p>
<p>Are you the person who combines an open mind with accurate work? Who understands that life at the cutting edge is exciting, demanding and rewarding? Then we’ll be looking forward to meeting you.</p>
<p>Send your résumé to raimon [at] service2media.com if you think you are up to the challenge.<br />
<img src="http://labs.rafols.org/img.php?id=s2m-hiring-post" alt=""/></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=73</wfw:commentRss>
		</item>
		<item>
		<title>Image Rotation in j2me</title>
		<link>http://blog.rafols.org/?p=58</link>
		<comments>http://blog.rafols.org/?p=58#comments</comments>
		<pubDate>Tue, 25 Aug 2009 23:49:13 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[j2me]]></category>

		<category><![CDATA[demoscene]]></category>

		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=58</guid>
		<description><![CDATA[Lately I&#8217;ve been creating some low level image functions for Java ME just to see if low level bitmap manipulation was way too slow for doing it on real time on Java ME or it was, at least, usable. I&#8217;ll publish more functions but I&#8217;ll start with Image Rotation.
In Java ME is easy to rotate [...]]]></description>
			<content:encoded><![CDATA[<p>Lately I&#8217;ve been creating some low level image functions for Java ME just to see if low level bitmap manipulation was way too slow for doing it on real time on Java ME or it was, at least, usable. I&#8217;ll publish more functions but I&#8217;ll start with Image Rotation.</p>
<p>In Java ME is easy to rotate images if you want to rotate by an angle multiple of 90° but it doesn&#8217;t provide any mechanism to rotate it by an arbitrary angle (yes, ok&#8230; you could do the same using the Mobile 3D API)</p>
<p>I created a small function that fills that gap and allows image rotation by any angle. The resulting image will have the same size as the original (watch out for the corners..)</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> rotateImage<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aimage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Image</span></a> src, <span class="kw4">float</span> angle, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Agraphics+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Graphics</span></a> g<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> sw <span class="sy0">=</span> src.<span class="me1">getWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> sh <span class="sy0">=</span> src.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> srcData <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">int</span><span class="br0">&#91;</span>sw <span class="sy0">*</span> sh<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; src.<span class="me1">getRGB</span><span class="br0">&#40;</span>srcData, 0, sw, 0, 0, sw, sh<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> dstData <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">int</span><span class="br0">&#91;</span>sw <span class="sy0">*</span> sh<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">double</span> rads <span class="sy0">=</span> angle <span class="sy0">*</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">PI</span> <span class="sy0">/</span> 180.<span class="me1">f</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">float</span> sa <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">sin</span><span class="br0">&#40;</span>rads<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">float</span> ca <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">cos</span><span class="br0">&#40;</span>rads<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> isa <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> <span class="br0">&#40;</span>256 <span class="sy0">*</span> sa<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> ica <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> <span class="br0">&#40;</span>256 <span class="sy0">*</span> ca<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> my <span class="sy0">=</span> <span class="sy0">-</span> <span class="br0">&#40;</span>sh <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> sh<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> mx <span class="sy0">=</span> <span class="sy0">-</span> <span class="br0">&#40;</span>sw &nbsp;<span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> j <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> j <span class="sy0">&lt;</span> sw<span class="sy0">;</span> j<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> srcx <span class="sy0">=</span> <span class="br0">&#40;</span> mx <span class="sy0">*</span> ica <span class="sy0">+</span> my <span class="sy0">*</span> isa<span class="br0">&#41;</span> <span class="sy0">&gt;&gt;</span> <span class="nu0">8</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> srcy <span class="sy0">=</span> <span class="br0">&#40;</span><span class="sy0">-</span>mx <span class="sy0">*</span> isa <span class="sy0">+</span> my <span class="sy0">*</span> ica<span class="br0">&#41;</span> <span class="sy0">&gt;&gt;</span> <span class="nu0">8</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; srcx <span class="sy0">+=</span> sw <span class="sy0">&gt;&gt;</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; srcy <span class="sy0">+=</span> sh <span class="sy0">&gt;&gt;</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>srcx <span class="sy0">&lt;</span> 0<span class="br0">&#41;</span> srcx <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>srcy <span class="sy0">&lt;</span> 0<span class="br0">&#41;</span> srcy <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>srcx <span class="sy0">&gt;</span> sw <span class="sy0">-</span> 1<span class="br0">&#41;</span> srcx <span class="sy0">=</span> sw <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>srcy <span class="sy0">&gt;</span> sh <span class="sy0">-</span> 1<span class="br0">&#41;</span> srcy <span class="sy0">=</span> sh <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dstData<span class="br0">&#91;</span>j <span class="sy0">+</span> i <span class="sy0">*</span> sw<span class="br0">&#93;</span> <span class="sy0">=</span> srcData<span class="br0">&#91;</span>srcx <span class="sy0">+</span> srcy <span class="sy0">*</span> sw<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mx<span class="sy0">++;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; my<span class="sy0">++;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; g.<span class="me1">drawRGB</span><span class="br0">&#40;</span>dstData, 0, sw, 0, 0, sw, sh, <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>If we move all the calculations that doesn&#8217;t need to be done in the inner loop to the external loop we will have a speed improvement:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> rotateImage<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aimage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Image</span></a> src, <span class="kw4">float</span> angle, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Agraphics+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Graphics</span></a> g<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> sw <span class="sy0">=</span> src.<span class="me1">getWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> sh <span class="sy0">=</span> src.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> srcData <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">int</span><span class="br0">&#91;</span>sw <span class="sy0">*</span> sh<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; src.<span class="me1">getRGB</span><span class="br0">&#40;</span>srcData, 0, sw, 0, 0, sw, sh<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> dstData <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">int</span><span class="br0">&#91;</span>sw <span class="sy0">*</span> sh<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">double</span> rads <span class="sy0">=</span> angle <span class="sy0">*</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">PI</span> <span class="sy0">/</span> 180.<span class="me1">f</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">float</span> sa <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">sin</span><span class="br0">&#40;</span>rads<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">float</span> ca <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">cos</span><span class="br0">&#40;</span>rads<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> isa <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> <span class="br0">&#40;</span>256 <span class="sy0">*</span> sa<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> ica <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> <span class="br0">&#40;</span>256 <span class="sy0">*</span> ca<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> my <span class="sy0">=</span> <span class="sy0">-</span> <span class="br0">&#40;</span>sh <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> sh<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> wpos <span class="sy0">=</span> i <span class="sy0">*</span> sw<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> xacc <span class="sy0">=</span> my <span class="sy0">*</span> isa <span class="sy0">-</span> <span class="br0">&#40;</span>sw <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span> <span class="sy0">*</span> ica <span class="sy0">+</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>sw <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> 8<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> yacc <span class="sy0">=</span> my <span class="sy0">*</span> ica <span class="sy0">+</span> <span class="br0">&#40;</span>sw <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span> <span class="sy0">*</span> isa <span class="sy0">+</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>sh <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> 8<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> j <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> j <span class="sy0">&lt;</span> sw<span class="sy0">;</span> j<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> srcx <span class="sy0">=</span> <span class="br0">&#40;</span>xacc <span class="sy0">&gt;&gt;</span> 8<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> srcy <span class="sy0">=</span> <span class="br0">&#40;</span>yacc <span class="sy0">&gt;&gt;</span> 8<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>srcx <span class="sy0">&lt;</span> 0<span class="br0">&#41;</span> srcx <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>srcy <span class="sy0">&lt;</span> 0<span class="br0">&#41;</span> srcy <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>srcx <span class="sy0">&gt;</span> sw <span class="sy0">-</span> 1<span class="br0">&#41;</span> srcx <span class="sy0">=</span> sw <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>srcy <span class="sy0">&gt;</span> sh <span class="sy0">-</span> 1<span class="br0">&#41;</span> srcy <span class="sy0">=</span> sh <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dstData<span class="br0">&#91;</span>wpos<span class="sy0">++</span><span class="br0">&#93;</span> <span class="sy0">=</span> srcData<span class="br0">&#91;</span>srcx <span class="sy0">+</span> srcy <span class="sy0">*</span> sw<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xacc <span class="sy0">+=</span> ica<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yacc <span class="sy0">-=</span> isa<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; my<span class="sy0">++;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; g.<span class="me1">drawRGB</span><span class="br0">&#40;</span>dstData, 0, sw, 0, 0, sw, sh, <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>And if we know beforehand the size of the image we want to rotate we could do some extra tricks (for example, here assumes the source image will be 256&#215;256 pixels and will only work with that resolution):</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> rotateImage<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aimage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Image</span></a> src, <span class="kw4">float</span> angle, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Agraphics+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Graphics</span></a> g<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> sw <span class="sy0">=</span> src.<span class="me1">getWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> sh <span class="sy0">=</span> src.<span class="me1">getHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> srcData <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">int</span><span class="br0">&#91;</span>sw <span class="sy0">*</span> sh<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; src.<span class="me1">getRGB</span><span class="br0">&#40;</span>srcData, 0, sw, 0, 0, sw, sh<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span><span class="br0">&#91;</span><span class="br0">&#93;</span> dstData <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">int</span><span class="br0">&#91;</span>sw <span class="sy0">*</span> sh<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">double</span> rads <span class="sy0">=</span> angle <span class="sy0">*</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">PI</span> <span class="sy0">/</span> 180.<span class="me1">f</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">float</span> sa <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">sin</span><span class="br0">&#40;</span>rads<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">float</span> ca <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">cos</span><span class="br0">&#40;</span>rads<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> isa <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> <span class="br0">&#40;</span>256 <span class="sy0">*</span> sa<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> ica <span class="sy0">=</span> <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span> <span class="br0">&#40;</span>256 <span class="sy0">*</span> ca<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">int</span> my <span class="sy0">=</span> <span class="sy0">-</span> <span class="br0">&#40;</span>sh <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> sh<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> wpos <span class="sy0">=</span> i <span class="sy0">*</span> sw<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> xacc <span class="sy0">=</span> my <span class="sy0">*</span> isa <span class="sy0">-</span> <span class="br0">&#40;</span>sw <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span> <span class="sy0">*</span> ica <span class="sy0">+</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>sw <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> 8<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> yacc <span class="sy0">=</span> my <span class="sy0">*</span> ica <span class="sy0">+</span> <span class="br0">&#40;</span>sw <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span> <span class="sy0">*</span> isa <span class="sy0">+</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>sh <span class="sy0">&gt;&gt;</span> 1<span class="br0">&#41;</span> <span class="sy0">&lt;&lt;</span> 8<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> j <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> j <span class="sy0">&lt;</span> sw<span class="sy0">;</span> j<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> srcx <span class="sy0">=</span> <span class="br0">&#40;</span>xacc <span class="sy0">&gt;&gt;</span> 8<span class="br0">&#41;</span> <span class="sy0">&amp;</span> 0xff<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> srcy <span class="sy0">=</span> yacc <span class="sy0">&amp;</span> 0xff00<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dstData<span class="br0">&#91;</span>wpos<span class="sy0">++</span><span class="br0">&#93;</span> <span class="sy0">=</span> srcData<span class="br0">&#91;</span>srcx <span class="sy0">+</span> srcy<span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xacc <span class="sy0">+=</span> ica<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yacc <span class="sy0">-=</span> isa<span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; my<span class="sy0">++;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; g.<span class="me1">drawRGB</span><span class="br0">&#40;</span>dstData, 0, sw, 0, 0, sw, sh, <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>These functions paints the rotated image in a Graphics object directly, but doing some minor changes it could generate a new Image with the content:<br />
* Change the function declaration to:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">public</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aimage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Image</span></a> rotateImage_img<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aimage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Image</span></a> src, <span class="kw4">float</span> angle<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
</ol>
</div>
</div>
<p>* Replace the drawRGB call with:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">return</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aimage+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Image</span></a>.<span class="me1">createRGBImage</span><span class="br0">&#40;</span>dstData, sw, sh, <span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
</div>
<p>Feel free to use it for whatever you want but it would be nice if you drop me a line and put me somewhere in the credits <img src='http://blog.rafols.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img src="http://labs.rafols.org/img.php?id=imgrot0-post" alt=""/></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=58</wfw:commentRss>
		</item>
		<item>
		<title>&#8216;Realtime&#8217; raytracing on j2me</title>
		<link>http://blog.rafols.org/?p=52</link>
		<comments>http://blog.rafols.org/?p=52#comments</comments>
		<pubDate>Mon, 15 Jun 2009 23:40:41 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[j2me]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=52</guid>
		<description><![CDATA[I have been playing a bit this afternoon with my old raytracer and decided to wrote a a small implementation in j2me.. yes.. it sounds completely useless but it was quite fun to remember the old days.
It&#8217;s a very basic raytracer, it only supports spheres and planes and then some hard shadows and reflections. I [...]]]></description>
			<content:encoded><![CDATA[<p>I have been playing a bit this afternoon with my old raytracer and decided to wrote a a small implementation in j2me.. yes.. it sounds completely useless but it was quite fun to remember the old days.<br />
It&#8217;s a very basic raytracer, it only supports spheres and planes and then some hard shadows and reflections. I haven&#8217;t done any optimitzation, for example checks if the camera ray intersects all objects for every single pixel and, obviously, it runs pretty slow on the real device (even on the emulator..)</p>
<p>Just three screenshots of the &#8216;realtime&#8217; (ehem..) raytracing:</p>
<p><img src="http://labs.rafols.org/rt00.png" alt="rt - screenshot 1" /> <img src="http://labs.rafols.org/rt01.png" alt="rt - screenshot 2" /><br />
<img src="http://labs.rafols.org/rt02.png" alt="rt - screenshot 3" /><br />
<img src="http://labs.rafols.org/img.php?id=rt0-post" alt=""/></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=52</wfw:commentRss>
		</item>
		<item>
		<title>Service2Media is hiring&#8230;</title>
		<link>http://blog.rafols.org/?p=41</link>
		<comments>http://blog.rafols.org/?p=41#comments</comments>
		<pubDate>Fri, 16 Jan 2009 00:53:08 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[service2media]]></category>

		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=41</guid>
		<description><![CDATA[Interested in coming to the Netherlands? 
Go to the jobs section of Service2Media.
]]></description>
			<content:encoded><![CDATA[<p>Interested in coming to the Netherlands? <img src='http://blog.rafols.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Go to the <a href="http://jobs.service2media.com">jobs</a> section of Service2Media.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=41</wfw:commentRss>
		</item>
		<item>
		<title>A long time ago..</title>
		<link>http://blog.rafols.org/?p=23</link>
		<comments>http://blog.rafols.org/?p=23#comments</comments>
		<pubDate>Wed, 14 Jan 2009 01:49:11 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[Enschede]]></category>

		<category><![CDATA[FuturLink]]></category>

		<category><![CDATA[j2me]]></category>

		<category><![CDATA[service2media]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=23</guid>
		<description><![CDATA[Yes.. it has been a long time since last post.. I have been a bit busy (ok.. not the whole 8 months) moving to the Netherlands. Since June-08 I&#8217;m living and working in Enschede, a nice city in the east border of the Netherlands.

 Some images of the recent snows (november): 



As a bonus I&#8217;ll [...]]]></description>
			<content:encoded><![CDATA[<p>Yes.. it has been a long time since last post.. I have been a bit busy (ok.. not the whole 8 months) moving to the Netherlands. Since June-08 I&#8217;m living and working in Enschede, a nice city in the east border of the Netherlands.</p>
<p><iframe width="425" height="500" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Enschede&amp;sll=37.0625,-95.677068&amp;sspn=58.337319,135.351563&amp;ie=UTF8&amp;s=AARTsJoOdjmfdWz_VCzTlBjE-whb4l85HQ&amp;ll=52.219808,6.892204&amp;spn=0.105166,0.145912&amp;z=12&amp;output=embed"></iframe></p>
<p> Some images of the recent snows (november): </p>
<p><img src="http://labs.rafols.org/content/enschede1.jpg" alt="Enschede" /></p>
<p><img src="http://labs.rafols.org/content/enschede2.jpg" alt="Enschede" /></p>
<p><img src="http://labs.rafols.org/content/enschede3.jpg" alt="Enschede" /></p>
<p>As a bonus I&#8217;ll include video captures of some applications I did for FuturLink:</p>
<p><object width="240" height="320" type="application/x-shockwave-flash" data="http://labs.rafols.org/flvplayer.swf?file=futurlink_mwc.flv&#038;autoStart=false"><param name="movie" value="http://labs.rafols.org/flvplayer.swf?file=futurlink_mwc.flv&#038;autoStart=false" /><param name="wmode" value="transparent" /></object></p>
<p>
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/bSbLnOIJfKQ&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/bSbLnOIJfKQ&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x3a3a3a&#038;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>
</p>
<p><img src="http://labs.rafols.org/img.php?id=mwc-post" alt=""/></p>
<p>Soon I will publish some videos / shots of my work here at <a href="http://www.service2media.com">Service2Media</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=23</wfw:commentRss>
		</item>
		<item>
		<title>After the NFC competition…</title>
		<link>http://blog.rafols.org/?p=14</link>
		<comments>http://blog.rafols.org/?p=14#comments</comments>
		<pubDate>Thu, 08 May 2008 00:05:08 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[j2me]]></category>

		<category><![CDATA[FuturLink]]></category>

		<category><![CDATA[nfc]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=14</guid>
		<description><![CDATA[Unfortunately we didn’t win anything at the NFC Competition… It was a pity after all the effort but what usually happens in a competition is that not everyone wins.
Here is a video capture of the application:


]]></description>
			<content:encoded><![CDATA[<p>Unfortunately we didn’t win anything at the NFC Competition… It was a pity after all the effort but what usually happens in a competition is that not everyone wins.</p>
<p>Here is a video capture of the application:</p>
<p><object width="240" height="320" type="application/x-shockwave-flash" data="http://labs.rafols.org/flvplayer.swf?file=futurlink_nfc.flv&#038;autoStart=false"><param name="movie" value="http://labs.rafols.org/flvplayer.swf?file=futurlink_nfc.flv&#038;autoStart=false" /><param name="wmode" value="transparent" /><img src="http://labs.rafols.org/img.php?id=nfc-post" alt=""/><br />
</object></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=14</wfw:commentRss>
		</item>
		<item>
		<title>NFC Competition</title>
		<link>http://blog.rafols.org/?p=9</link>
		<comments>http://blog.rafols.org/?p=9#comments</comments>
		<pubDate>Fri, 25 Apr 2008 23:53:38 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[j2me]]></category>

		<category><![CDATA[FuturLink]]></category>

		<category><![CDATA[nfc]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=9</guid>
		<description><![CDATA[My company has been selected finalist for the NFC Forum Global Competition - Touching the Future with another nine world-wide companies in the “The Best NFC Service of the Year 2008″. The winners will be announced next tuesday (April 29).
I designed and developed the J2ME client for Nokia 6131 NFC which allows you to interact [...]]]></description>
			<content:encoded><![CDATA[<p>My company has been selected finalist for the <em>NFC Forum Global Competition - Touching the Future </em>with another nine world-wide companies in the “The Best NFC Service of the Year 2008″. The winners will be announced next tuesday (April 29).<br />
I designed and developed the J2ME client for <a title="Nokia 6131 NFC" href="http://www.forum.nokia.com/devices/6131_NFC">Nokia 6131 NFC</a> which allows you to interact with one of our Touch Screens (<a title="FuturLink's B200TS" href="http://www.futurlink.com/en/products_fitxa.php?nombre=wilico_b200ts" target="_blank">B200TS</a>) via NFC and Bluetooth. I will wait until the competition is over to post more details and some screenshots and a video of the application.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=9</wfw:commentRss>
		</item>
		<item>
		<title>Move along, nothing to see here..</title>
		<link>http://blog.rafols.org/?p=3</link>
		<comments>http://blog.rafols.org/?p=3#comments</comments>
		<pubDate>Thu, 24 Apr 2008 18:40:36 +0000</pubDate>
		<dc:creator>raimon</dc:creator>
		
		<category><![CDATA[j2me]]></category>

		<category><![CDATA[demoscene]]></category>

		<category><![CDATA[intro]]></category>

		<guid isPermaLink="false">http://blog.rafols.org/?p=3</guid>
		<description><![CDATA[In this blog I’ll post the experiences of working developing J2ME applications. It will be mainly focused on the graphical part and how the user may interact with them although there will be non-interactive applications like the one I’m introducing below.
This was my first attempt to do a 4k intro with J2ME. I’m not proud [...]]]></description>
			<content:encoded><![CDATA[<p>In this blog I’ll post the experiences of working developing J2ME applications. It will be mainly focused on the graphical part and how the user may interact with them although there will be non-interactive applications like the one I’m introducing below.<br />
This was my first attempt to do a 4k intro with J2ME. I’m not proud of the result, but it was made only in one afternoon to increase dramatically the number of compo entries (from 1 to 2). The binary application requires a J2ME Phone with MMAPI + JSR 184 support. In order to install the application you have to send the mtro.jar file to your phone through bluetooth / cable / irda.</p>
<div class="mceTemp">
<dl class="wp-caption alignnone" style="width: 190px;">
<dt class="wp-caption-dt"><img title="mtro" src="http://www.rafols.org/mobiledev/mtro.gif" alt="mtro" width="180" height="209" /></dt>
</dl>
</div>
<p><a title="mtro - binary" href="http://www.rafols.org/mobiledev/fzn_mtro.zip" target="_self">Binary</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rafols.org/?feed=rss2&amp;p=3</wfw:commentRss>
		</item>
	</channel>
</rss>
