<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Check to see if a bitmap is a solid color</title>
		<link>http://www.allegro.cc/forums/view/590844</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 04 Apr 2007 19:13:38 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Like the topic title indicates, I&#39;m asking what is the fastest way to check if a bitmap&#39;s a solid color?<br />I&#39;m trying to check and see if a 32x32 bitmap is solid magic pink.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Tue, 03 Apr 2007 15:53:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>EDIT: nm, I misunderstood the question.</p><p>The real answer: two for loops.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Tue, 03 Apr 2007 15:58:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And getpixel I assume? I guess it&#39;s not too slow for only loading bitmap routines.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Tue, 03 Apr 2007 16:01:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can also use direct access. Or one of the colour depth specific access functions that don&#39;t do bounds checking.</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/_getpixel32" target="_blank"><span class="a">_getpixel32</span></a><span class="k2">(</span><span class="k2">)</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Tue, 03 Apr 2007 16:08:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okee doke. Thanks <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Tue, 03 Apr 2007 16:13:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Perhaps this from exfire.c, with some little change you can adjust it to fit your need:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>   <span class="c">/* It is even faster if we transfer the data in 32 bit chunks, rather</span></td></tr><tr><td class="number">2</td><td><span class="c">    * than only one pixel at a time. This method may not work on really</span></td></tr><tr><td class="number">3</td><td><span class="c">    * unusual machine architectures, but should be ok on just about</span></td></tr><tr><td class="number">4</td><td><span class="c">    * anything that you are practically likely to come across.</span></td></tr><tr><td class="number">5</td><td><span class="c">    */</span></td></tr><tr><td class="number">6</td><td>   <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>      <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>      draw_bottom_line_of_fire<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>      bmp_select<span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>      <span class="k1">for</span> <span class="k2">(</span>y<span class="k3">=</span><span class="n">64</span><span class="k2">;</span> y<span class="k3">&lt;</span>SCREEN_H-1<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>   <span class="c">/* get an address for reading line y+1 */</span></td></tr><tr><td class="number">14</td><td>   address <span class="k3">=</span> <a href="http://www.allegro.cc/manual/bmp_read_line" target="_blank"><span class="a">bmp_read_line</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, y<span class="k3">+</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>   <span class="c">/* read line in 32 bit chunks */</span></td></tr><tr><td class="number">17</td><td>   <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/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span> x <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>uint32_t<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">18</td><td>      <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span>uint32_t <span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>temp<span class="k2">[</span>x<span class="k2">]</span><span class="k2">)</span> <span class="k3">=</span> bmp_read32<span class="k2">(</span>address<span class="k3">+</span>x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>   <span class="c">/* adjust it */</span></td></tr><tr><td class="number">21</td><td>   <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/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">22</td><td>      <span class="k1">if</span> <span class="k2">(</span>temp<span class="k2">[</span>x<span class="k2">]</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">23</td><td>         temp<span class="k2">[</span>x<span class="k2">]</span><span class="k3">-</span><span class="k3">-</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>   <span class="c">/* get an address for writing line y */</span></td></tr><tr><td class="number">26</td><td>   address <span class="k3">=</span> <a href="http://www.allegro.cc/manual/bmp_write_line" target="_blank"><span class="a">bmp_write_line</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>   <span class="c">/* write line in 32 bit chunks */</span></td></tr><tr><td class="number">29</td><td>   <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/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span> x <span class="k3">+</span><span class="k3">=</span> <span class="k1">sizeof</span><span class="k2">(</span>uint32_t<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">30</td><td>      bmp_write32<span class="k2">(</span>address<span class="k3">+</span>x, <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span>uint32_t <span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>temp<span class="k2">[</span>x<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td>      <a href="http://www.allegro.cc/manual/bmp_unwrite_line" target="_blank"><span class="a">bmp_unwrite_line</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>      <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>temp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>&#160;</td></tr><tr><td class="number">39</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>


<a href="http://www.gamedev.net/reference/programming/features/imageproc/page2.asp">This</a> article from Gamedev about digital processing can help too for implementing gaussian blur.<br />_
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Tue, 03 Apr 2007 17:10:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="c">//Untested </span>
<span class="k1">bool</span> is_solid_color<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>src, <span class="k1">int</span> col<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span>, y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
  <span class="k1">int</span> check_col <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
  <span class="k1">while</span><span class="k2">(</span>y <span class="k3">&lt;</span> src-&gt;h <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>check_col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>src,x<span class="k3">+</span><span class="k3">+</span>,y<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> col<span class="k2">)</span>
    <span class="k1">if</span><span class="k2">(</span>x <span class="k3">=</span><span class="k3">=</span> src-&gt;w<span class="k2">)</span> <span class="k2">{</span>  x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>   <span class="k2">}</span>

  <span class="k1">if</span><span class="k2">(</span>check_col <span class="k3">!</span><span class="k3">=</span> col<span class="k2">)</span>
    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
  <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Funny thing about this is the worst case scenario is when the bitmap IS the given solid color.  <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Onewing)</author>
		<pubDate>Tue, 03 Apr 2007 20:30:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Onewing Phipps:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> is_solid_color<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>src, <span class="k1">int</span> col<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span>, y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
  <span class="k1">int</span> check_col <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
  <span class="k1">while</span><span class="k2">(</span>y <span class="k3">&lt;</span> src-&gt;h <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>check_col <span class="k3">=</span> <a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>src,x<span class="k3">+</span><span class="k3">+</span>,y<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> col<span class="k2">)</span>
    <span class="k1">if</span><span class="k2">(</span>x <span class="k3">=</span><span class="k3">=</span> src-&gt;w<span class="k2">)</span> <span class="k2">{</span>  x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>   <span class="k2">}</span>

  <span class="c">// just a minor improvement</span>
  <span class="k1">return</span> check_col <span class="k3">=</span><span class="k3">=</span> col<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Rampage)</author>
		<pubDate>Tue, 03 Apr 2007 20:47:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Wed, 04 Apr 2007 19:13:38 +0000</pubDate>
	</item>
</rss>
