<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Help with understanding bitmap locking</title>
		<link>http://www.allegro.cc/forums/view/608076</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 11 Aug 2011 05:31:58 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Essentially I want to lock the bitmap and get the alpha component of each pixel. </p><p>I have the following code:</p><div class="source-code snippet"><div class="inner"><pre>  <span class="c">//lock the bitmap</span>
    <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> region<span class="k2">;</span>
    region <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>m_bitmap,
      ALLEGRO_PIXEL_FORMAT_ABGR_8888,
      ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</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> m_bitmapDimensions.y<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span>
    <span class="k2">{</span>
      <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> m_bitmapDimensions.x<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x<span class="k2">)</span>
      <span class="k2">{</span>

      <span class="k2">}</span>
    <span class="k2">}</span>
</pre></div></div><p>

But after that I&#39;m stuck. I&#39;m not sure how to get the 32 bit integer representing the color components, and then I&#39;m unsure how the logical shifts work to extract the alpha in an endian independent way.</p><p>Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Thu, 11 Aug 2011 04:43:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> region<span class="k2">;</span>
region <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>bitmap, ALLEGRO_PIXEL_FORMAT_ABGR_8888, ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</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>bitmap<span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span> <span class="k2">{</span>
    <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>row <span class="k3">=</span> region-&gt;data<span class="k2">;</span>
    row <span class="k3">+</span><span class="k3">=</span> y <span class="k3">*</span> region-&gt;pitch<span class="k2">;</span>
    <span class="k1">uint32_t</span> <span class="k3">*</span>pixel <span class="k3">=</span> row<span class="k2">;</span>
    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</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>bitmap<span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x<span class="k2">)</span> <span class="k2">{</span>
        <span class="k1">int</span> alpha <span class="k3">=</span> <span class="k3">*</span>pixel <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">24</span><span class="k2">;</span>
        <span class="c">/* do something with alpha */</span>
        pixel<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span>
<a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

[edit:]<br />A simpler solution:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> region<span class="k2">;</span>
region <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>bitmap, ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE, ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</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>bitmap<span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span> <span class="k2">{</span>
    <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>pixel <span class="k3">=</span> region-&gt;data<span class="k2">;</span>
    pixel <span class="k3">+</span><span class="k3">=</span> y <span class="k3">*</span> region-&gt;pitch<span class="k2">;</span>
    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</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>bitmap<span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x<span class="k2">)</span> <span class="k2">{</span>
        pixel <span class="k3">+</span><span class="k3">=</span> <span class="n">3</span><span class="k2">;</span>
        <span class="k1">int</span> alpha <span class="k3">=</span> <span class="k3">*</span>pixel<span class="k2">;</span>
        <span class="c">/* do something with alpha */</span>
        pixel<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span>
<a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Both solution are endian independent (not that you will still find a lot of big endian hardware).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 11 Aug 2011 05:28:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">uint32_t</span> <span class="k3">*</span>p <span class="k3">=</span> lock-&gt;data<span class="k2">;</span>
<span class="k1">int</span> a<span class="k2">;</span>

<span class="k1">for</span> each pixel: a <span class="k3">=</span> p<span class="k2">[</span>x<span class="k2">]</span> <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">24</span>

at end of row: p <span class="k3">+</span><span class="k3">=</span> lock-&gt;pitch<span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Thu, 11 Aug 2011 05:29:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you to both of you <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Thu, 11 Aug 2011 05:31:58 +0000</pubDate>
	</item>
</rss>
