<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Suggestions for optimization</title>
		<link>http://www.allegro.cc/forums/view/617177</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 18 Dec 2017 06:49:08 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi guys,</p><p>I just needed an &#39;is_same_bitmap&#39; function (compares only the image data of the bitmap and ignores alpha [suitable for the purpose I had in mind])</p><p>I wrote the following which when using memory bitmaps is perfectly fast for my purposes (it&#39;s a one off conversion job rather than a critical run-time process) but I&#39;m always keen to know of improvements I can make to code. So, here is my code and I&#39;d welcome any suggestions for optimization or how you might write the same function.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">bool</span> al_is_same_bitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>img1, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>img2<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>img1<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>img2<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span>
<span class="number">  4</span>       <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>img1<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>img2<span class="k2">)</span><span class="k2">)</span>
<span class="number">  5</span>       <span class="k2">{</span>
<span class="number">  6</span>           <span class="c">// Simple check, if they are not the same size they can't be the same.</span>
<span class="number">  7</span>           <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  8</span>       <span class="k2">}</span>
<span class="number">  9</span>
<span class="number"> 10</span>    <span class="k1">int</span> x<span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">int</span> y<span class="k2">;</span>
<span class="number"> 12</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> colour1<span class="k2">;</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> colour2<span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">unsigned</span> <span class="k1">char</span> r<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">unsigned</span> <span class="k1">char</span> g<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">unsigned</span> <span class="k1">char</span> b<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>    <span class="k1">for</span><span class="k2">(</span>y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>img1<span class="k2">)</span><span class="k2">;</span> y <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</span>        <span class="k1">for</span><span class="k2">(</span>x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>img1<span class="k2">)</span><span class="k2">;</span> x <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number"> 21</span>        <span class="k2">{</span>
<span class="number"> 22</span>            colour1 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>img1, x, y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>            <a href="http://www.allegro.cc/manual/al_unmap_rgb"><span class="a">al_unmap_rgb</span></a><span class="k2">(</span>colour1, <span class="k3">&amp;</span>r<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="k3">&amp;</span>g<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="k3">&amp;</span>b<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>            colour2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>img2, x, y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>            <a href="http://www.allegro.cc/manual/al_unmap_rgb"><span class="a">al_unmap_rgb</span></a><span class="k2">(</span>colour2, <span class="k3">&amp;</span>r<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="k3">&amp;</span>g<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="k3">&amp;</span>b<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>            <span class="k1">if</span><span class="k2">(</span>r<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> r<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> g<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> g<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> b<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> b<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span>
<span class="number"> 27</span>            <span class="k2">{</span>
<span class="number"> 28</span>                <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 29</span>            <span class="k2">}</span>
<span class="number"> 30</span>        <span class="k2">}</span>
<span class="number"> 31</span>    <span class="k2">}</span>
<span class="number"> 32</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 33</span><span class="k2">}</span>
</div></div><p>

Thank you,</p><p>Stan
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (StanEd)</author>
		<pubDate>Mon, 18 Dec 2017 03:13:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can speed things up by locking the bitmaps. Also, if you do lock them you can compare them line-by-line like so:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lr1 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>b1, <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>b1<span class="k2">)</span>, ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span><a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lr2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>b2, <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>b1<span class="k2">)</span>, ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>b1<span class="k2">)</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  5</span>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_565.html" target="_blank">memcmp</a><span class="k2">(</span><span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>lr1-&gt;data <span class="k3">+</span> lr1-&gt;pitch <span class="k3">*</span> y,
<span class="number">  6</span>             <span class="k2">(</span><span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>lr2-&gt;data <span class="k3">+</span> lr2-&gt;pitch <span class="k3">*</span> y,
<span class="number">  7</span>             lr1-&gt;pixel_size <span class="k3">*</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>b1<span class="k2">)</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>b1<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>    <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>b2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="k2">}</span>
<span class="number"> 12</span><span class="k2">}</span>
<span class="number"> 13</span>
<span class="number"> 14</span><a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>b1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span><a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>b2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 18 Dec 2017 04:25:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How often do you do this twice? That is, the same bitmap will be checked twice? And how often are the bitmaps changed? Because it might be useful to just calculate hashes for them (going pixel by pixel once per bitmap) and then compare the hashes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Mon, 18 Dec 2017 06:49:08 +0000</pubDate>
	</item>
</rss>
