<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>16 bit color to ALLEGRO_COLOR</title>
		<link>http://www.allegro.cc/forums/view/609214</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 07 Jan 2012 04:23:56 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello All,</p><p>There are no getr16() getg16() getb16() functions in A5, yet more code to write myself!</p><p>I have 16 bit colours read from an old tileset file in &quot;unsigned short int&quot; format.  Under A4 they decode perfectly using getr16() etc.</p><p>Any ideas on best way of decoding it under A5?  I am thinking bit shifting.</p><p>&lt;rant&gt;I am considering devoting my life to created Allegro425 which makes A4 code run under A5.  All the simplicity of 4 with the features of 5.  Here&#39;s to ALLEGRO_BITMAP-&gt;w (can&#39;t be that hard now can it?)&lt;/rant&gt;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Bunting)</author>
		<pubDate>Sat, 07 Jan 2012 00:56:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The reason for opaque data types in A5 is to avoid exposing implementation to help ensure binary compatibility. If from one day to the next A5 added ALLEGRO_BITMAP-&gt;something_new then it would no longer be binary compatible. I believe one of the goals of A5 is binary compatibility.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jmasterx)</author>
		<pubDate>Sat, 07 Jan 2012 01:05:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could just copy/paste the functions from Allegro 4&#39;s source. </p><p>Note that storing raw 16-bit data directly in a file and using Allegro 4 <span class="source-code"><a href="http://www.allegro.cc/manual/getr16"><span class="a">getr16</span></a></span> isn&#39;t even guaranteed to work if you are doing it after <span class="source-code"><a href="http://www.allegro.cc/manual/set_gfx_mode"><span class="a">set_gfx_mode</span></a></span> is called because the RGB ordering is machine dependent.</p><p>Regarding the ALLEGRO_BITMAP-&gt;w comment, Allegro 5 does not expose internal struct data when it&#39;s not necessary. That is a good design decision.</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="c">/* lookup table for scaling 5 bit colors up to 8 bits */</span>
<span class="number">  2</span><span class="k1">int</span> _rgb_scale_5<span class="k2">[</span><span class="n">32</span><span class="k2">]</span> <span class="k3">=</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>   <span class="n">0</span>,   <span class="n">8</span>,   <span class="n">16</span>,  <span class="n">24</span>,  <span class="n">33</span>,  <span class="n">41</span>,  <span class="n">49</span>,  <span class="n">57</span>,
<span class="number">  5</span>   <span class="n">66</span>,  <span class="n">74</span>,  <span class="n">82</span>,  <span class="n">90</span>,  <span class="n">99</span>,  <span class="n">107</span>, <span class="n">115</span>, <span class="n">123</span>,
<span class="number">  6</span>   <span class="n">132</span>, <span class="n">140</span>, <span class="n">148</span>, <span class="n">156</span>, <span class="n">165</span>, <span class="n">173</span>, <span class="n">181</span>, <span class="n">189</span>,
<span class="number">  7</span>   <span class="n">198</span>, <span class="n">206</span>, <span class="n">214</span>, <span class="n">222</span>, <span class="n">231</span>, <span class="n">239</span>, <span class="n">247</span>, <span class="n">255</span>
<span class="number">  8</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="c">/* lookup table for scaling 6 bit colors up to 8 bits */</span>
<span class="number"> 12</span><span class="k1">int</span> _rgb_scale_6<span class="k2">[</span><span class="n">64</span><span class="k2">]</span> <span class="k3">=</span>
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>   <span class="n">0</span>,   <span class="n">4</span>,   <span class="n">8</span>,   <span class="n">12</span>,  <span class="n">16</span>,  <span class="n">20</span>,  <span class="n">24</span>,  <span class="n">28</span>,
<span class="number"> 15</span>   <span class="n">32</span>,  <span class="n">36</span>,  <span class="n">40</span>,  <span class="n">44</span>,  <span class="n">48</span>,  <span class="n">52</span>,  <span class="n">56</span>,  <span class="n">60</span>,
<span class="number"> 16</span>   <span class="n">65</span>,  <span class="n">69</span>,  <span class="n">73</span>,  <span class="n">77</span>,  <span class="n">81</span>,  <span class="n">85</span>,  <span class="n">89</span>,  <span class="n">93</span>,
<span class="number"> 17</span>   <span class="n">97</span>,  <span class="n">101</span>, <span class="n">105</span>, <span class="n">109</span>, <span class="n">113</span>, <span class="n">117</span>, <span class="n">121</span>, <span class="n">125</span>,
<span class="number"> 18</span>   <span class="n">130</span>, <span class="n">134</span>, <span class="n">138</span>, <span class="n">142</span>, <span class="n">146</span>, <span class="n">150</span>, <span class="n">154</span>, <span class="n">158</span>,
<span class="number"> 19</span>   <span class="n">162</span>, <span class="n">166</span>, <span class="n">170</span>, <span class="n">174</span>, <span class="n">178</span>, <span class="n">182</span>, <span class="n">186</span>, <span class="n">190</span>,
<span class="number"> 20</span>   <span class="n">195</span>, <span class="n">199</span>, <span class="n">203</span>, <span class="n">207</span>, <span class="n">211</span>, <span class="n">215</span>, <span class="n">219</span>, <span class="n">223</span>,
<span class="number"> 21</span>   <span class="n">227</span>, <span class="n">231</span>, <span class="n">235</span>, <span class="n">239</span>, <span class="n">243</span>, <span class="n">247</span>, <span class="n">251</span>, <span class="n">255</span>
<span class="number"> 22</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>AL_INLINE<span class="k2">(</span><span class="k1">int</span>, <a href="http://www.allegro.cc/manual/getr16"><span class="a">getr16</span></a>, <span class="k2">(</span><span class="k1">int</span> c<span class="k2">)</span>,
<span class="number"> 25</span><span class="k2">{</span>
<span class="number"> 26</span>   <span class="k1">return</span> _rgb_scale_5<span class="k2">[</span><span class="k2">(</span>c <span class="k3">&gt;</span><span class="k3">&gt;</span> _rgb_r_shift_16<span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0x1F</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span><span class="k2">)</span>
<span class="number"> 28</span>
<span class="number"> 29</span>
<span class="number"> 30</span>AL_INLINE<span class="k2">(</span><span class="k1">int</span>, <a href="http://www.allegro.cc/manual/getg16"><span class="a">getg16</span></a>, <span class="k2">(</span><span class="k1">int</span> c<span class="k2">)</span>,
<span class="number"> 31</span><span class="k2">{</span>
<span class="number"> 32</span>   <span class="k1">return</span> _rgb_scale_6<span class="k2">[</span><span class="k2">(</span>c <span class="k3">&gt;</span><span class="k3">&gt;</span> _rgb_g_shift_16<span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0x3F</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 33</span><span class="k2">}</span><span class="k2">)</span>
<span class="number"> 34</span>
<span class="number"> 35</span>
<span class="number"> 36</span>AL_INLINE<span class="k2">(</span><span class="k1">int</span>, <a href="http://www.allegro.cc/manual/getb16"><span class="a">getb16</span></a>, <span class="k2">(</span><span class="k1">int</span> c<span class="k2">)</span>,
<span class="number"> 37</span><span class="k2">{</span>
<span class="number"> 38</span>   <span class="k1">return</span> _rgb_scale_5<span class="k2">[</span><span class="k2">(</span>c <span class="k3">&gt;</span><span class="k3">&gt;</span> _rgb_b_shift_16<span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0x1F</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 39</span><span class="k2">}</span><span class="k2">)</span>
</div></div><p>

You&#39;ll have to use the shift values that relate to whatever RGB order you are using.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 07 Jan 2012 01:20:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Untested and pseudocodish:
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// Assuming rgb ordering</span>
rshift <span class="k3">=</span> <span class="n">11</span><span class="k2">;</span>
gshift <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
bshift <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>

r5 <span class="k3">=</span> <span class="k2">(</span>color <span class="k3">&gt;</span><span class="k3">&gt;</span> rshift<span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0x1F</span><span class="k2">;</span>
g6 <span class="k3">=</span> <span class="k2">(</span>color <span class="k3">&gt;</span><span class="k3">&gt;</span> gshift<span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0x3F</span><span class="k2">;</span>
b5 <span class="k3">=</span> <span class="k2">(</span>color <span class="k3">&gt;</span><span class="k3">&gt;</span> bshift<span class="k2">)</span> <span class="k3">&amp;</span> <span class="n">0x1F</span><span class="k2">;</span>

r8 <span class="k3">=</span> r5<span class="k3">*</span><span class="n">255</span><span class="k3">/</span><span class="n">31</span><span class="k2">;</span>
g8 <span class="k3">=</span> g6<span class="k3">*</span><span class="n">255</span><span class="k3">/</span><span class="n">63</span><span class="k2">;</span>
g8 <span class="k3">=</span> b5<span class="k3">*</span><span class="n">255</span><span class="k3">/</span><span class="n">31</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Sat, 07 Jan 2012 01:31:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks I will look try it out.  This is for legacy import so won&#39;t be used very often (the importer will be available in the game).</p><p>Looks like it will just have to be #define gbw(lolz) al_get_bitmap_width(lolz)</p><p>After a few months of &quot;expanding&quot; [making more portable] my code to A5 we almost have a ported version of Mowteor which I am very happy about.</p><p>The important part (for me) is that this game tests my underlying library which is essentially an in-house class-based wrapper for Allegro allowing me to develop loads of games and larger &quot;Meteor sized&quot; projects with ease and without duplication.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Bunting)</author>
		<pubDate>Sat, 07 Jan 2012 02:08:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code"><div class="toolbar"><span class="name">pack.h</span><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="p">#ifndef __included_pack_h__</span>
<span class="number">  2</span><span class="p">#define __included_pack_h__</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">uint32_t</span> pack_pixel<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color, <a href="http://www.allegro.cc/manual/ALLEGRO_PIXEL_FORMAT"><span class="a">ALLEGRO_PIXEL_FORMAT</span></a> format<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> unpack_pixel<span class="k2">(</span><span class="k1">uint32_t</span> p, <a href="http://www.allegro.cc/manual/ALLEGRO_PIXEL_FORMAT"><span class="a">ALLEGRO_PIXEL_FORMAT</span></a> format<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="p">#endif</span>
</div></div><p>

</p><div class="source-code"><div class="toolbar"><span class="name">pack.c</span><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="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include "pack.h"</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="c">/* lookup table for scaling 5 bit colors up to 8 bits */</span>
<span class="number">   5</span><span class="k1">static</span> <span class="k1">int</span> _rgb_scale_5<span class="k2">[</span><span class="n">32</span><span class="k2">]</span> <span class="k3">=</span>
<span class="number">   6</span><span class="k2">{</span>
<span class="number">   7</span>   <span class="n">0</span>,   <span class="n">8</span>,   <span class="n">16</span>,  <span class="n">24</span>,  <span class="n">33</span>,  <span class="n">41</span>,  <span class="n">49</span>,  <span class="n">57</span>,
<span class="number">   8</span>   <span class="n">66</span>,  <span class="n">74</span>,  <span class="n">82</span>,  <span class="n">90</span>,  <span class="n">99</span>,  <span class="n">107</span>, <span class="n">115</span>, <span class="n">123</span>,
<span class="number">   9</span>   <span class="n">132</span>, <span class="n">140</span>, <span class="n">148</span>, <span class="n">156</span>, <span class="n">165</span>, <span class="n">173</span>, <span class="n">181</span>, <span class="n">189</span>,
<span class="number">  10</span>   <span class="n">198</span>, <span class="n">206</span>, <span class="n">214</span>, <span class="n">222</span>, <span class="n">231</span>, <span class="n">239</span>, <span class="n">247</span>, <span class="n">255</span>
<span class="number">  11</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  12</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="c">/* lookup table for scaling 6 bit colors up to 8 bits */</span>
<span class="number">  15</span><span class="k1">static</span> <span class="k1">int</span> _rgb_scale_6<span class="k2">[</span><span class="n">64</span><span class="k2">]</span> <span class="k3">=</span>
<span class="number">  16</span><span class="k2">{</span>
<span class="number">  17</span>   <span class="n">0</span>,   <span class="n">4</span>,   <span class="n">8</span>,   <span class="n">12</span>,  <span class="n">16</span>,  <span class="n">20</span>,  <span class="n">24</span>,  <span class="n">28</span>,
<span class="number">  18</span>   <span class="n">32</span>,  <span class="n">36</span>,  <span class="n">40</span>,  <span class="n">44</span>,  <span class="n">48</span>,  <span class="n">52</span>,  <span class="n">56</span>,  <span class="n">60</span>,
<span class="number">  19</span>   <span class="n">65</span>,  <span class="n">69</span>,  <span class="n">73</span>,  <span class="n">77</span>,  <span class="n">81</span>,  <span class="n">85</span>,  <span class="n">89</span>,  <span class="n">93</span>,
<span class="number">  20</span>   <span class="n">97</span>,  <span class="n">101</span>, <span class="n">105</span>, <span class="n">109</span>, <span class="n">113</span>, <span class="n">117</span>, <span class="n">121</span>, <span class="n">125</span>,
<span class="number">  21</span>   <span class="n">130</span>, <span class="n">134</span>, <span class="n">138</span>, <span class="n">142</span>, <span class="n">146</span>, <span class="n">150</span>, <span class="n">154</span>, <span class="n">158</span>,
<span class="number">  22</span>   <span class="n">162</span>, <span class="n">166</span>, <span class="n">170</span>, <span class="n">174</span>, <span class="n">178</span>, <span class="n">182</span>, <span class="n">186</span>, <span class="n">190</span>,
<span class="number">  23</span>   <span class="n">195</span>, <span class="n">199</span>, <span class="n">203</span>, <span class="n">207</span>, <span class="n">211</span>, <span class="n">215</span>, <span class="n">219</span>, <span class="n">223</span>,
<span class="number">  24</span>   <span class="n">227</span>, <span class="n">231</span>, <span class="n">235</span>, <span class="n">239</span>, <span class="n">243</span>, <span class="n">247</span>, <span class="n">251</span>, <span class="n">255</span>
<span class="number">  25</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  26</span>
<span class="number">  27</span><span class="p">#define PACK_8888(a,b,c,d) (((a) &lt;&lt; 24) | ((b) &lt;&lt; 16) | ((c) &lt;&lt; 8) | (d))</span>
<span class="number">  28</span><span class="p">#define PACK_4444(a,b,c,d) ((((a) &amp; 0xf0) &lt;&lt; 8) | (((b) &amp; 0xf0) &lt;&lt; 4) | (((c) &amp; 0xf0)) | (((d) &amp; 0xf0) &gt;&gt; 4))</span>
<span class="number">  29</span><span class="p">#define PACK_565(a,b,c)    ((((a) * 31/255) &lt;&lt; 11) | (((b) * 63/255) &lt;&lt; 5) | ((c) * 31/255))</span>
<span class="number">  30</span><span class="p">#define PACK_555(a,b,c)    ((((a) * 31/255) &lt;&lt; 10) | (((b) * 31/255) &lt;&lt; 5) | ((c) * 31/255))</span>
<span class="number">  31</span>
<span class="number">  32</span><span class="k1">uint32_t</span> pack_pixel<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color, <a href="http://www.allegro.cc/manual/ALLEGRO_PIXEL_FORMAT"><span class="a">ALLEGRO_PIXEL_FORMAT</span></a> format<span class="k2">)</span>
<span class="number">  33</span><span class="k2">{</span>
<span class="number">  34</span>   <span class="k1">uint8_t</span> r, g, b, a<span class="k2">;</span>
<span class="number">  35</span>
<span class="number">  36</span>   <a href="http://www.allegro.cc/manual/al_unmap_rgba"><span class="a">al_unmap_rgba</span></a><span class="k2">(</span>color, <span class="k3">&amp;</span>r, <span class="k3">&amp;</span>g, <span class="k3">&amp;</span>b, <span class="k3">&amp;</span>a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  37</span>
<span class="number">  38</span>   <span class="k1">switch</span> <span class="k2">(</span>format<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  39</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ARGB_8888:
<span class="number">  40</span>         <span class="k1">return</span> PACK_8888<span class="k2">(</span>a, r, g, b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  41</span>
<span class="number">  42</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGBA_8888:
<span class="number">  43</span>         <span class="k1">return</span> PACK_8888<span class="k2">(</span>r, g, b, a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>
<span class="number">  45</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ABGR_8888:
<span class="number">  46</span>         <span class="k1">return</span> PACK_8888<span class="k2">(</span>a, b, g, r<span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>
<span class="number">  48</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_XBGR_8888:
<span class="number">  49</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_BGR_888:
<span class="number">  50</span>         <span class="k1">return</span> PACK_8888<span class="k2">(</span><span class="n">0</span>, b, g, r<span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>
<span class="number">  52</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGBX_8888:
<span class="number">  53</span>         <span class="k1">return</span> PACK_8888<span class="k2">(</span>r, g, b, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>
<span class="number">  55</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_XRGB_8888:
<span class="number">  56</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGB_888:
<span class="number">  57</span>         <span class="k1">return</span> PACK_8888<span class="k2">(</span><span class="n">0</span>, r, g, b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>
<span class="number">  59</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ARGB_4444:
<span class="number">  60</span>         <span class="k1">return</span> PACK_4444<span class="k2">(</span>a, r, g, b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>
<span class="number">  62</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGB_565:
<span class="number">  63</span>         <span class="k1">return</span> PACK_565<span class="k2">(</span>r,g,b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>
<span class="number">  65</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_BGR_565:
<span class="number">  66</span>         <span class="k1">return</span> PACK_565<span class="k2">(</span>b,g,r<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGBA_5551:
<span class="number">  69</span>         <span class="k1">return</span> <span class="k2">(</span>PACK_555<span class="k2">(</span>r,g,b<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span>a ? <span class="n">1</span> <span class="k2">:</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ARGB_1555:
<span class="number">  72</span>         <span class="k1">return</span> PACK_555<span class="k2">(</span>r,g,b<span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span>a ? <span class="n">0x8000</span> <span class="k2">:</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>
<span class="number">  74</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGB_555:
<span class="number">  75</span>         <span class="k1">return</span> PACK_555<span class="k2">(</span>r,g,b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>
<span class="number">  77</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_BGR_555:
<span class="number">  78</span>         <span class="k1">return</span> PACK_555<span class="k2">(</span>b,g,r<span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>   <span class="k2">}</span>
<span class="number">  80</span>
<span class="number">  81</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  82</span><span class="k2">}</span>
<span class="number">  83</span>
<span class="number">  84</span><span class="p">#define UNPACK_8888(a,b,c,d)  a = (p &gt;&gt; 24) &amp; 0xff; b = (p &gt;&gt; 16) &amp; 0xff; c = (p &gt;&gt; 8) &amp; 0xff; d = (p &amp; 0xff)</span>
<span class="number">  85</span><span class="p">#define UNPACK_4444(a,b,c,d)  a = ((p &gt;&gt; 12) &amp; 0x0f) * 255 / 15; b = ((p &gt;&gt; 8) &amp; 0x0f) * 255 / 15; c = ((p &gt;&gt; 4) &amp; 0xf) * 255 / 15; d = (p &amp; 0xf) * 255 / 15</span>
<span class="number">  86</span><span class="p">#define UNPACK_565(a,b,c)     a = _rgb_scale_5[(p &gt;&gt; 11) &amp; 0x1f]; b = _rgb_scale_6[(p &gt;&gt; 5) &amp; 0x1f]; c = _rgb_scale_5[p &amp; 0x1f];</span>
<span class="number">  87</span><span class="p">#define UNPACK_555(a,b,c)     a = _rgb_scale_5[(p &gt;&gt; 10) &amp; 0x1f]; b = _rgb_scale_5[(p &gt;&gt; 5) &amp; 0x1f]; c = _rgb_scale_5[p &amp; 0x1f];</span>
<span class="number">  88</span>
<span class="number">  89</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> unpack_pixel<span class="k2">(</span><span class="k1">uint32_t</span> p, <a href="http://www.allegro.cc/manual/ALLEGRO_PIXEL_FORMAT"><span class="a">ALLEGRO_PIXEL_FORMAT</span></a> format<span class="k2">)</span>
<span class="number">  90</span><span class="k2">{</span>
<span class="number">  91</span>   <span class="k1">uint8_t</span> r <span class="k3">=</span> <span class="n">0</span>, g <span class="k3">=</span> <span class="n">0</span>, b <span class="k3">=</span> <span class="n">0</span>, a <span class="k3">=</span> <span class="n">255</span>, x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  92</span>
<span class="number">  93</span>   <span class="k1">switch</span> <span class="k2">(</span>format<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  94</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ARGB_8888:
<span class="number">  95</span>         UNPACK_8888<span class="k2">(</span>a, r, g, b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  96</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGBA_8888:
<span class="number">  99</span>         UNPACK_8888<span class="k2">(</span>r, g, b, a<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 101</span>
<span class="number"> 102</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ABGR_8888:
<span class="number"> 103</span>         UNPACK_8888<span class="k2">(</span>a, b, g, r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 105</span>
<span class="number"> 106</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_XBGR_8888:
<span class="number"> 107</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_BGR_888:
<span class="number"> 108</span>         UNPACK_8888<span class="k2">(</span>x, b, g, r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 110</span>
<span class="number"> 111</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGBX_8888:
<span class="number"> 112</span>         UNPACK_8888<span class="k2">(</span>r, g, b, x<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 114</span>
<span class="number"> 115</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_XRGB_8888:
<span class="number"> 116</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGB_888:
<span class="number"> 117</span>         UNPACK_8888<span class="k2">(</span>x, r, g, b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 119</span>
<span class="number"> 120</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ARGB_4444:
<span class="number"> 121</span>         UNPACK_4444<span class="k2">(</span>a, r, g, b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 123</span>
<span class="number"> 124</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGB_565:
<span class="number"> 125</span>         UNPACK_565<span class="k2">(</span>r,g,b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 127</span>
<span class="number"> 128</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_BGR_565:
<span class="number"> 129</span>         UNPACK_565<span class="k2">(</span>b,g,r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 131</span>
<span class="number"> 132</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGBA_5551:
<span class="number"> 133</span>         a <span class="k3">=</span> <span class="k2">(</span>p <span class="k3">&amp;</span> <span class="n">1</span><span class="k2">)</span> ? <span class="n">255</span> <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 134</span>         p <span class="k3">&gt;</span><span class="k3">&gt;</span><span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 135</span>         UNPACK_555<span class="k2">(</span>r,g,b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 137</span>
<span class="number"> 138</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_ARGB_1555:
<span class="number"> 139</span>         a <span class="k3">=</span> <span class="k2">(</span>p <span class="k3">&amp;</span> <span class="n">0x8000</span><span class="k2">)</span> ? <span class="n">255</span> <span class="k2">:</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 140</span>         UNPACK_555<span class="k2">(</span>r,g,b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 141</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 142</span>
<span class="number"> 143</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_RGB_555:
<span class="number"> 144</span>         UNPACK_555<span class="k2">(</span>r,g,b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 145</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 146</span>
<span class="number"> 147</span>      <span class="k1">case</span> ALLEGRO_PIXEL_FORMAT_BGR_555:
<span class="number"> 148</span>         UNPACK_555<span class="k2">(</span>b,g,r<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 149</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 150</span>
<span class="number"> 151</span>   <span class="k2">}</span>
<span class="number"> 152</span>
<span class="number"> 153</span>   <span class="k1">return</span> <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span>r, g, b, a<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span><span class="k2">}</span>
</div></div><p>

Disclaimers:</p><ol><li><p>Not thoroughly tested
</p></li><li><p>Could use some more scale tables to smooth out rounding
</p></li><li><p>Not built for speed
</p></li></ol></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 07 Jan 2012 04:23:56 +0000</pubDate>
	</item>
</rss>
