<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Use embedded bitmap with Allegro 5</title>
		<link>http://www.allegro.cc/forums/view/607852</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 16 Jul 2011 16:20:14 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So, I&#39;m trying to embed some small graphical resource files (in .bmp form) into my executable. The only way I&#39;ve found to do this is with resource scripts, and loading the bitmaps into the program with the windows.h function LoadBitmap(). The problem is, the LoadBitmap() function returns a HBITMAP handle. And the Allegro library uses its own data type, ALLEGRO_BITMAP *. So, is there any way to load this embedded bitmap using Allegro, or do I have to use external files for my graphical resources?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gatleos)</author>
		<pubDate>Sat, 16 Jul 2011 03:57:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;ll have to write a function to convert an HBITMAP into an ALLEGRO_BITMAP*. Allegro 4 has these functions, named <span class="source-code"><a href="http://www.allegro.cc/manual/convert_hbitmap_to_bitmap"><span class="a">convert_hbitmap_to_bitmap</span></a></span> and <span class="source-code"><a href="http://www.allegro.cc/manual/convert_bitmap_to_hbitmap"><span class="a">convert_bitmap_to_hbitmap</span></a></span>. You should take a look at the Allegro 4 source code for these functions to see how they did it, and then adapt them to use Allegro 5 instead.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 16 Jul 2011 04:07:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That seems like an awfully important thing to &quot;forget&quot; to port to Allegro 5... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>Anyway, thanks. This should help a lot!</p><p>EDIT: Wait... is there any documentation that shows the source code, or am I just going to have to download Allegro 4 and comb through the source?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gatleos)</author>
		<pubDate>Sat, 16 Jul 2011 04:14:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve come to the conclusion that for most of your graphics, you should keep your bitmaps separate from your executable.  For compactness may want to keep them in a dat or zip file.  This can easily be done with the <a href="http://www.allegro.cc/manual/5/physfs.html">PhysicsFS</a> addon.</p><p>The exception I&#39;ve seen is if you want to set up some kind of system where you get a default fallback when the bitmap you&#39;re <i>trying</i> to access is missing.  This can make sprint programming easier - a default_sound, default_font, default_bitmap, etc.  In this case, you&#39;d want to embed the image in the program.</p><p>For windows-specific programs you can do this relatively easily, but for cross-platform code you&#39;ll want to embed binary code.  Here&#39;s an example where I embedded some binary, and loaded it as a memfile.</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_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>default_image <span class="k3">=</span> NULL<span class="k2">;</span> <span class="c">// global, in this case //</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">static</span> <span class="k1">bool</span> create_default_image<span class="k2">(</span><span class="k2">)</span>
<span class="number">  4</span><span class="k2">{</span>
<span class="number">  5</span>  <span class="k1">if</span> <span class="k2">(</span>default_image<span class="k2">)</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>  <span class="c">// default image, in png format:</span>
<span class="number">  8</span>  <span class="k1">unsigned</span> <span class="k1">char</span> default_img<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span> <span class="n">0x89</span>, <span class="n">0x50</span>, <span class="n">0x4E</span>, <span class="n">0x47</span>, <span class="n">0x0D</span>, <span class="n">0x0A</span>, <span class="n">0x1A</span>,
<span class="number">  9</span>    <span class="n">0x0A</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x0D</span>, <span class="n">0x49</span>, <span class="n">0x48</span>, <span class="n">0x44</span>, <span class="n">0x52</span>, <span class="n">0x00</span>, <span class="n">0x00</span>,
<span class="number"> 10</span>    <span class="n">0x00</span>, <span class="n">0x0F</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x0F</span>, <span class="n">0x08</span>, <span class="n">0x06</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x00</span>,
<span class="number"> 11</span>    <span class="n">0x3B</span>, <span class="n">0xD6</span>, <span class="n">0x95</span>, <span class="n">0x4A</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x19</span>, <span class="n">0x74</span>, <span class="n">0x45</span>, <span class="n">0x58</span>,
<span class="number"> 12</span>    <span class="n">0x74</span>, <span class="n">0x53</span>, <span class="n">0x6F</span>, <span class="n">0x66</span>, <span class="n">0x74</span>, <span class="n">0x77</span>, <span class="n">0x61</span>, <span class="n">0x72</span>, <span class="n">0x65</span>, <span class="n">0x00</span>, <span class="n">0x41</span>,
<span class="number"> 13</span>    <span class="n">0x64</span>, <span class="n">0x6F</span>, <span class="n">0x62</span>, <span class="n">0x65</span>, <span class="n">0x20</span>, <span class="n">0x49</span>, <span class="n">0x6D</span>, <span class="n">0x61</span>, <span class="n">0x67</span>, <span class="n">0x65</span>, <span class="n">0x52</span>,
<span class="number"> 14</span>    <span class="n">0x65</span>, <span class="n">0x61</span>, <span class="n">0x64</span>, <span class="n">0x79</span>, <span class="n">0x71</span>, <span class="n">0xC9</span>, <span class="n">0x65</span>, <span class="n">0x3C</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x00</span>,
<span class="number"> 15</span>    <span class="n">0xB3</span>, <span class="n">0x49</span>, <span class="n">0x44</span>, <span class="n">0x41</span>, <span class="n">0x54</span>, <span class="n">0x78</span>, <span class="n">0xDA</span>, <span class="n">0xA4</span>, <span class="n">0x53</span>, <span class="n">0x31</span>, <span class="n">0x0E</span>,
<span class="number"> 16</span>    <span class="n">0x83</span>, <span class="n">0x30</span>, <span class="n">0x0C</span>, <span class="n">0x8C</span>, <span class="n">0x51</span>, <span class="n">0xB6</span>, <span class="n">0xCE</span>, <span class="n">0x5D</span>, <span class="n">0x3A</span>, <span class="n">0x75</span>, <span class="n">0xE0</span>,
<span class="number"> 17</span>    <span class="n">0x09</span>, <span class="n">0x4C</span>, <span class="n">0xFC</span>, <span class="n">0x5F</span>, <span class="n">0x9D</span>, <span class="n">0x78</span>, <span class="n">0x42</span>, <span class="n">0x17</span>, <span class="n">0x16</span>, <span class="n">0x3A</span>, <span class="n">0x30</span>,
<span class="number"> 18</span>    <span class="n">0x33</span>, <span class="n">0x1B</span>, <span class="n">0x8C</span>, <span class="n">0xB8</span>, <span class="n">0xE8</span>, <span class="n">0x62</span>, <span class="n">0x82</span>, <span class="n">0x04</span>, <span class="n">0xF4</span>, <span class="n">0xA4</span>, <span class="n">0x28</span>,
<span class="number"> 19</span>    <span class="n">0xC9</span>, <span class="n">0xD9</span>, <span class="n">0x67</span>, <span class="n">0x27</span>, <span class="n">0x8E</span>, <span class="n">0x23</span>, <span class="n">0xAA</span>, <span class="n">0x1A</span>, <span class="n">0x3C</span>, <span class="n">0x44</span>, <span class="n">0x64</span>,
<span class="number"> 20</span>    <span class="n">0x47</span>, <span class="n">0x2E</span>, <span class="n">0x7E</span>, <span class="n">0xE2</span>, <span class="n">0xB9</span>, <span class="n">0x58</span>, <span class="n">0x12</span>, <span class="n">0x4D</span>, <span class="n">0xE3</span>, <span class="n">0xEB</span>, <span class="n">0x30</span>,
<span class="number"> 21</span>    <span class="n">0x20</span>, <span class="n">0x07</span>, <span class="n">0x11</span>, <span class="n">0x64</span>, <span class="n">0x36</span>, <span class="n">0x63</span>, <span class="n">0x49</span>, <span class="n">0xE4</span>, <span class="n">0xF1</span>, <span class="n">0x78</span>, <span class="n">0x0E</span>,
<span class="number"> 22</span>    <span class="n">0x29</span>, <span class="n">0x40</span>, <span class="n">0xE5</span>, <span class="n">0x85</span>, <span class="n">0x66</span>, <span class="n">0xB4</span>, <span class="n">0xE1</span>, <span class="n">0x05</span>, <span class="n">0xE0</span>, <span class="n">0xCC</span>, <span class="n">0x2F</span>,
<span class="number"> 23</span>    <span class="n">0x5D</span>, <span class="n">0x6B</span>, <span class="n">0xCB</span>, <span class="n">0x6C</span>, <span class="n">0x62</span>, <span class="n">0xC5</span>, <span class="n">0xCC</span>, <span class="n">0xEB</span>, <span class="n">0x23</span>, <span class="n">0xCE</span>, <span class="n">0x74</span>,
<span class="number"> 24</span>    <span class="n">0xB2</span>, <span class="n">0x11</span>, <span class="n">0xE1</span>, <span class="n">0x2A</span>, <span class="n">0xEC</span>, <span class="n">0x24</span>, <span class="n">0x91</span>, <span class="n">0x37</span>, <span class="n">0x67</span>, <span class="n">0x81</span>, <span class="n">0x64</span>,
<span class="number"> 25</span>    <span class="n">0xD1</span>, <span class="n">0x3D</span>, <span class="n">0x07</span>, <span class="n">0x8A</span>, <span class="n">0x17</span>, <span class="n">0xF8</span>, <span class="n">0x09</span>, <span class="n">0x79</span>, <span class="n">0x6F</span>, <span class="n">0x6B</span>, <span class="n">0x60</span>,
<span class="number"> 26</span>    <span class="n">0x2D</span>, <span class="n">0xD8</span>, <span class="n">0xAF</span>, <span class="n">0x7F</span>, <span class="n">0x5F</span>, <span class="n">0x3A</span>, <span class="n">0x32</span>, <span class="n">0xFC</span>, <span class="n">0xAB</span>, <span class="n">0xF0</span>, <span class="n">0x0F</span>,
<span class="number"> 27</span>    <span class="n">0x50</span>, <span class="n">0xED</span>, <span class="n">0x6F</span>, <span class="n">0xD7</span>, <span class="n">0xA2</span>, <span class="n">0x8A</span>, <span class="n">0x69</span>, <span class="n">0x06</span>, <span class="n">0x98</span>, <span class="n">0x27</span>, <span class="n">0xBF</span>,
<span class="number"> 28</span>    <span class="n">0x3C</span>, <span class="n">0xF3</span>, <span class="n">0x62</span>, <span class="n">0xC8</span>, <span class="n">0xEE</span>, <span class="n">0xE4</span>, <span class="n">0x3A</span>, <span class="n">0x6C</span>, <span class="n">0xB5</span>, <span class="n">0x67</span>, <span class="n">0x1C</span>,
<span class="number"> 29</span>    <span class="n">0x77</span>, <span class="n">0x18</span>, <span class="n">0x8C</span>, <span class="n">0x75</span>, <span class="n">0xF3</span>, <span class="n">0xD9</span>, <span class="n">0x89</span>, <span class="n">0xD9</span>, <span class="n">0x86</span>, <span class="n">0x0E</span>, <span class="n">0x13</span>,
<span class="number"> 30</span>    <span class="n">0x57</span>, <span class="n">0x55</span>, <span class="n">0x65</span>, <span class="n">0x47</span>, <span class="n">0x06</span>, <span class="n">0x02</span>, <span class="n">0x16</span>, <span class="n">0x7B</span>, <span class="n">0xFB</span>, <span class="n">0xCE</span>, <span class="n">0xAF</span>,
<span class="number"> 31</span>    <span class="n">0x9A</span>, <span class="n">0x05</span>, <span class="n">0x18</span>, <span class="n">0x00</span>, <span class="n">0xE7</span>, <span class="n">0x13</span>, <span class="n">0x9E</span>, <span class="n">0x16</span>, <span class="n">0xD5</span>, <span class="n">0x9E</span>, <span class="n">0x99</span>,
<span class="number"> 32</span>    <span class="n">0x41</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x00</span>, <span class="n">0x49</span>, <span class="n">0x45</span>, <span class="n">0x4E</span>, <span class="n">0x44</span>, <span class="n">0xAE</span>, <span class="n">0x42</span>,
<span class="number"> 33</span>    <span class="n">0x60</span>, <span class="n">0x82</span> <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>  <span class="c">//ALLEGRO_FILE *file = al_open_memfile(sizeof(default_img), default_img); // &lt;-- 4.9.22</span>
<span class="number"> 36</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_open_memfile"><span class="a">al_open_memfile</span></a><span class="k2">(</span>default_img, <span class="k1">sizeof</span><span class="k2">(</span>default_img<span class="k2">)</span>, <span class="s">"rw"</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// &lt;-- since 5.0.0 RC4</span>
<span class="number"> 37</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>file<span class="k2">)</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"memfile loading didn't work :("</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>  default_image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap_f"><span class="a">al_load_bitmap_f</span></a><span class="k2">(</span>file, <span class="s">".png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>default_image<span class="k2">)</span> std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"loading default_image didn't work :("</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 41</span>  <span class="k1">else</span> <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>default_image, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>
<span class="number"> 43</span>  <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>
<span class="number"> 45</span>  <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 46</span><span class="k2">}</span>
</div></div><p>

This is a small 15x15 image.  Larger binary data will <i>quickly</i> bloat using this technique.  I&#39;ve experimented with encoding/compressing/decompressing larger images with some success.</p><p>for more, search with something like &quot;embed binary image in c++&quot;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 16 Jul 2011 04:14:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That code looks promising... I&#39;ve already tried loading in images with XPM files, and I already have the code for it (no points for guessing what it&#39;s a picture of):</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">/* XPM */</span>
<span class="number">   2</span><span class="k1">static</span> <span class="k1">char</span> <span class="k3">*</span>SQUARE_xpm<span class="k2">[</span><span class="k2">]</span><span class="k3">=</span><span class="k2">{</span>
<span class="number">   3</span><span class="s">"180 180 2 1"</span>,
<span class="number">   4</span><span class="s">"      c #FF00FF"</span>,
<span class="number">   5</span><span class="s">"0     c #FFFFFF"</span>,
<span class="number">   6</span><span class="s">"                                                                                                000000000000            000000000000                                                "</span>,
<span class="number">   7</span><span class="s">"               000000      000000                                00          00                 000000000000            000000000000    00000       0000         00000     00000000 "</span>,
<span class="number">   8</span><span class="s">"              00    00    00000000    00   00        0          0000        0000                000000000000    0000    0000    0000      000      00  00        00  0     00    00 "</span>,
<span class="number">   9</span><span class="s">"              0      0    00000000   0000 0000      000         0000       000000               000000000000   000000   000      000    000 0      00  00        00  0     00000000 "</span>,
<span class="number">  10</span><span class="s">"              0 0  0 0    00 00 00   000000000     00000      00000000    00000000      0000    0000    0000  000  000  00   00   00   000  0      00  00        00000     00    00 "</span>,
<span class="number">  11</span><span class="s">"              0      0    00000000   000000000    0000000    0000  0000   00000000     000000   000      000  00    00  00  0000  00  00000         0000         00        00    00 "</span>,
<span class="number">  12</span><span class="s">"              0 0000 0    00    00    0000000     0000000    0000  0000    000000      000000   000      000  00    00  00  0000  00  00  00         00          00        00    00 "</span>,
<span class="number">  13</span><span class="s">"              0  00  0    000  000     00000       00000      00 00 00       00         0000    0000    0000  000  000  00   00   00  00  00       000000      0000        00   000 "</span>,
<span class="number">  14</span><span class="s">"              00    00    00000000      000         000          00          00                 000000000000   000000   000      000  00  00         00       00000       000  0000 "</span>,
<span class="number">  15</span><span class="s">"               000000      000000        0           0         000000      000000               000000000000    0000    0000    0000   0000          00        000       0000   00  "</span>,
<span class="number">  16</span><span class="s">"                                                                                                000000000000            000000000000                                      00        "</span>,
<span class="number">  17</span><span class="s">"                                                                                                000000000000            000000000000                                                "</span>,
<span class="number">  18</span><span class="s">" 0                   0                                                                                                                                                              "</span>,
<span class="number">  19</span><span class="s">" 00                 00       00        00  00      0000000     000000                    00          00          00                                                          0      "</span>,
<span class="number">  20</span><span class="s">" 000               000      0000       00  00     00 00 00     00   00                  0000        0000         00                                                          0      "</span>,
<span class="number">  21</span><span class="s">" 00000           00000     000000      00  00     00 00 00      00                     000000      000000        00           00        00                     0    0       000     "</span>,
<span class="number">  22</span><span class="s">" 0000000       0000000       00        00  00     00 00 00      0000                     00          00          00            00      00         00          00    00      000     "</span>,
<span class="number">  23</span><span class="s">" 000000000   000000000       00        00  00      0000 00     00  00                    00          00          00       00000000    00000000    00         0000000000    00000    "</span>,
<span class="number">  24</span><span class="s">" 0000000       0000000       00                      00 00     00  00                    00          00          00            00      00         00          00    00     00000    "</span>,
<span class="number">  25</span><span class="s">" 00000           00000     000000                    00 00      0000    0000000000     000000        00        000000         00        00        0000000      0    0     0000000   "</span>,
<span class="number">  26</span><span class="s">" 000               000      0000       00  00        00 00        00    0000000000      0000         00         0000                                                      0000000   "</span>,
<span class="number">  27</span><span class="s">" 00                 00       00        00  00        00 00    00   00   0000000000       00          00          00                                                      000000000  "</span>,
<span class="number">  28</span><span class="s">" 0                   0                                         000000                  000000                                                                            000000000  "</span>,
<span class="number">  29</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  30</span><span class="s">"                                                    00                                                                                                                              "</span>,
<span class="number">  31</span><span class="s">"                00        00  00       00 00        00                     000         00             00       00                                                                   "</span>,
<span class="number">  32</span><span class="s">"               0000       00  00       00 00       00000                  00 00        00            00         00                                                                  "</span>,
<span class="number">  33</span><span class="s">"               0000       00  00      0000000     00          00   0      00 00        00           00           00       00  00         00                                         "</span>,
<span class="number">  34</span><span class="s">"               0000        0  0        00 00      00          00  00       000        00           00             00       0000          00                                         "</span>,
<span class="number">  35</span><span class="s">"                00                     00 00       0000          00       00000 0                  00             00     00000000      000000                000000000              "</span>,
<span class="number">  36</span><span class="s">"                00                     00 00          00        00        00 0000                  00             00       0000        000000                                       "</span>,
<span class="number">  37</span><span class="s">"                                      0000000         00       00         00  00                    00           00       00  00         00                                         "</span>,
<span class="number">  38</span><span class="s">"                00                     00 00      00000       00  00      00 000                     00         00                       00         000                     000     "</span>,
<span class="number">  39</span><span class="s">"                00                     00 00        00        0   00       000 00                     00       00                                   000                     000     "</span>,
<span class="number">  40</span><span class="s">"                                                    00                                                                                             00                               "</span>,
<span class="number">  41</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  42</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  43</span><span class="s">"   00000         0         0000        0000           00      000000        000       0000000      0000        0000                                   00                   00       "</span>,
<span class="number">  44</span><span class="s">"  00   00       00        00  00      00  00         000      00           00         00   00     00  00      00  00                                 00                     00      "</span>,
<span class="number">  45</span><span class="s">"  00  000     0000        00  00          00        0000      00          00          00   00     00  00      00  00        000         000         00                       00     "</span>,
<span class="number">  46</span><span class="s">"  00 0000       00            00          00       00 00      00          00               00     000 00      00  00        000         000        00          000000         00    "</span>,
<span class="number">  47</span><span class="s">"  00 0 00       00           00         000       00  00      00000       00000           00       0000        00000                              00                           00   "</span>,
<span class="number">  48</span><span class="s">"  0000 00       00          00            00      0000000         00      00  00         00       00 000         00                                00          000000         00    "</span>,
<span class="number">  49</span><span class="s">"  000  00       00         00             00          00          00      00  00        00        00  00         00         000         000         00                       00     "</span>,
<span class="number">  50</span><span class="s">"  00   00       00        00  00      00  00          00      00  00      00  00        00        00  00        00          000         000          00                     00      "</span>,
<span class="number">  51</span><span class="s">"   00000      000000      000000       0000          0000      0000        0000         00         0000        000                       00           00                   00       "</span>,
<span class="number">  52</span><span class="s">"                                                                                                                                        00                                          "</span>,
<span class="number">  53</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  54</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  55</span><span class="s">"   00000        00        000000        0000      00000       0000000     0000000       0000      00  00       0000          0000     000  00     0000        00   00     00   00   "</span>,
<span class="number">  56</span><span class="s">"  00   00      0000        00  00      00  00      00 00       00   0      00  00      00  00     00  00        00            00       00  00      00         000 000     00   00   "</span>,
<span class="number">  57</span><span class="s">"  00   00     00  00       00  00     00   00      00  00      00          00   0     00   00     00  00        00            00       00 00       00         0000000     000  00   "</span>,
<span class="number">  58</span><span class="s">"  00 0000     00  00       00  00     00           00  00      00  0       00  0      00          00  00        00            00       00 00       00         0000000     0000 00   "</span>,
<span class="number">  59</span><span class="s">"  00 0000     00  00       00000      00           00  00      00000       00000      00          000000        00            00       0000        00         00 0 00     0000000   "</span>,
<span class="number">  60</span><span class="s">"  00 0000     000000       00  00     00           00  00      00  0       00  0      00  000     00  00        00        00  00       00 00       00   0     00   00     00 0000   "</span>,
<span class="number">  61</span><span class="s">"  00          00  00       00  00     00   00      00  00      00          00         00   00     00  00        00        00  00       00 00       00  00     00   00     00  000   "</span>,
<span class="number">  62</span><span class="s">"  00          00  00       00  00      00  00      00 00       00   0      00          00  00     00  00        00        00  00       00  00      00  00     00   00     00   00   "</span>,
<span class="number">  63</span><span class="s">"   00000      00  00      000000        0000      00000       0000000     0000          00000     00  00       0000        0000       000  00     0000000     00   00     00   00   "</span>,
<span class="number">  64</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  65</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  66</span><span class="s">"                                                                                                                                                                             0      "</span>,
<span class="number">  67</span><span class="s">"  000000        000       000000       0000       000000      00  00      00  00      00   00     00  00      00  00      0000000       0000      0             0000        000     "</span>,
<span class="number">  68</span><span class="s">"   00  00      00 00       00  00     00  00      0 00 0      00  00      00  00      00   00     00  00      00  00      00  000       00        00              00       00 00    "</span>,
<span class="number">  69</span><span class="s">"   00  00     00   00      00  00     00  00        00        00  00      00  00      00   00     00  00      00  00      0  00         00         00             00      00   00   "</span>,
<span class="number">  70</span><span class="s">"   00  00     00   00      00  00     00            00        00  00      00  00      00   00      0000       00  00         00         00          00            00                "</span>,
<span class="number">  71</span><span class="s">"   00000      00   00      00000       000          00        00  00      00  00      00 0 00       00         0000         00          00           00           00                "</span>,
<span class="number">  72</span><span class="s">"   00         00  000      00 00         00         00        00  00      00  00      00 0 00      0000         00         00           00            00          00                "</span>,
<span class="number">  73</span><span class="s">"   00         00 0000      00  00     00  00        00        00  00      00  00       00 00      00  00        00         00   0       00             00         00                "</span>,
<span class="number">  74</span><span class="s">"   00          00000       00  00     00  00        00        00  00       0000        00 00      00  00        00        00   00       00              00        00                "</span>,
<span class="number">  75</span><span class="s">"  0000            00      000  00      0000        0000        0000         00         00 00      00  00       0000       0000000       0000             0      0000                "</span>,
<span class="number">  76</span><span class="s">"                 0000                                                                                                                                                               "</span>,
<span class="number">  77</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  78</span><span class="s">"    00                                                                                                                                                                              "</span>,
<span class="number">  79</span><span class="s">"    00                    000                        000                    000                   000            00           00      000          0000                             "</span>,
<span class="number">  80</span><span class="s">"     00                    00                         00                   00 00                   00            00           00       00            00                             "</span>,
<span class="number">  81</span><span class="s">"                           00                         00                   00                      00                                  00            00                             "</span>,
<span class="number">  82</span><span class="s">"               0000        00000       0000        00000       0000        00          000 00      00 00       0000         0000       00  00        00       000000      00000     "</span>,
<span class="number">  83</span><span class="s">"                  00       00  00     00  00      00  00      00  00      00000       00  00       000 00        00           00       00 00         00       00 0 00     00  00    "</span>,
<span class="number">  84</span><span class="s">"               00000       00  00     00          00  00      000000       00         00  00       00  00        00           00       0000          00       00 0 00     00  00    "</span>,
<span class="number">  85</span><span class="s">"              00  00       00  00     00          00  00      00           00         00  00       00  00        00           00       00 00         00       00 0 00     00  00    "</span>,
<span class="number">  86</span><span class="s">"              00  00       00  00     00  00      00  00      00  00       00          00000       00  00        00           00       00  00        00       00 0 00     00  00    "</span>,
<span class="number">  87</span><span class="s">"               000 00     00 000       0000        000 00      0000       0000            00      000  00      000000     00  00      000  00      000000     00   00     00  00    "</span>,
<span class="number">  88</span><span class="s">"                                                                                      00  00                              00  00                                                    "</span>,
<span class="number">  89</span><span class="s">"                                                                                       0000                                0000                                                     "</span>,
<span class="number">  90</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number">  91</span><span class="s">"                                                                                                                                         000         00       000          000  00  "</span>,
<span class="number">  92</span><span class="s">"                                                    0                                                                                   00           00         00        00 00 0   "</span>,
<span class="number">  93</span><span class="s">"                                                   00                                                                                   00           00         00        00  000   "</span>,
<span class="number">  94</span><span class="s">"  00 000       000 00     000 00       0000       000000      00  00      00  00      00   00     00   00     00  00      000000       00            00          00                 "</span>,
<span class="number">  95</span><span class="s">"   00  00     00  00       00 000     00  00       00         00  00      00  00      00   00      00 00      00  00      0   00      00                          00                "</span>,
<span class="number">  96</span><span class="s">"   00  00     00  00       000 00      00          00         00  00      00  00      00 0 00       000       00  00         00        00            00          00                 "</span>,
<span class="number">  97</span><span class="s">"   00  00     00  00       00            00        00         00  00      00  00      00 0 00       000       00  00       00           00           00         00                  "</span>,
<span class="number">  98</span><span class="s">"   00  00     00  00       00         00  00       00 00      00  00       0000        00 00       00 00       0000       00   0        00           00         00                  "</span>,
<span class="number">  99</span><span class="s">"   00000       00000      0000         0000         000        000 00       00         00 00      00   00        00       000000         000         00       000                   "</span>,
<span class="number"> 100</span><span class="s">"   00             00                                                                                            00                                                                  "</span>,
<span class="number"> 101</span><span class="s">"  0000           0000                                                                                        0000                                                                   "</span>,
<span class="number"> 102</span><span class="s">"                              00        00                    00            000                     00                    00                        0         00                    "</span>,
<span class="number"> 103</span><span class="s">"    0000      00  00         00        0000       00  00       00          00 00                   0000       00  00       00         00 00        000         00         00  00    "</span>,
<span class="number"> 104</span><span class="s">"   00  00     00  00        00        00  00      00  00        00         00 00                  00  00      00  00        00        00 00       00 00         00                  "</span>,
<span class="number"> 105</span><span class="s">"   00  00                                                                   000                                                                                             00      "</span>,
<span class="number"> 106</span><span class="s">"   00         00  00       0000        0000        0000        0000       00000        0000        0000        0000        0000       0000        0000        0000         0000     "</span>,
<span class="number"> 107</span><span class="s">"   00         00  00      00  00          00          00          00          00      00  00      00  00      00  00      00  00        00          00          00        00  00    "</span>,
<span class="number"> 108</span><span class="s">"   00         00  00      000000       00000       00000       00000       00000      00          000000      000000      000000        00          00          00        00  00    "</span>,
<span class="number"> 109</span><span class="s">"   00  00     00  00      00          00  00      00  00      00  00      00  00      00          00          00          00            00          00          00        000000    "</span>,
<span class="number"> 110</span><span class="s">"   00  00     00  00      00  00      00  00      00  00      00  00      00  00      00  00      00          00          00            00          00          00        00  00    "</span>,
<span class="number"> 111</span><span class="s">"    0000       000 00      0000        000 00      000 00      000 00      000 00      0000        00000       00000       00000      000000      000000      000000      00  00    "</span>,
<span class="number"> 112</span><span class="s">"     00                                                                                 00                                                                                          "</span>,
<span class="number"> 113</span><span class="s">"   0000                                                                               0000                                                                                          "</span>,
<span class="number"> 114</span><span class="s">"      00                                00                    00            00        00                      00  00      00  00                    0000      00  00      0000      "</span>,
<span class="number"> 115</span><span class="s">"     00                     00000      0000       00  00       00          0000        00         00  00                                 00        00  00     00  00      0   0     "</span>,
<span class="number"> 116</span><span class="s">"    00                     0000       00  00      00  00        00        00  00        00        00  00       0000       00  00         00        00         00  00      0   0     "</span>,
<span class="number"> 117</span><span class="s">"  000000                  00 00                                                                               00  00      00  00        0000       00         00  00      0   0     "</span>,
<span class="number"> 118</span><span class="s">"  00   0      0000000     00 00        0000        0000        0000       00  00      00  00      00  00      00  00      00  00       00  00      00          0000       0000      "</span>,
<span class="number"> 119</span><span class="s">"  00             00 00    0000000     00  00      00  00      00  00      00  00      00  00      00  00      00  00      00  00       00         000000      000000      0   0     "</span>,
<span class="number"> 120</span><span class="s">"  00000        0000000    00 00       00  00      00  00      00  00      00  00      00  00      00  00      00  00      00  00       00          00           00        0  0000   "</span>,
<span class="number"> 121</span><span class="s">"  00          00 00       00 00       00  00      00  00      00  00      00  00      00  00      00  00      00  00      00  00       00  00      00         000000      0   00    "</span>,
<span class="number"> 122</span><span class="s">"  00   0      00 00       00 00       00  00      00  00      00  00      00  00      00  00       0000       00  00      00  00        0000      00            00        0   00 0  "</span>,
<span class="number"> 123</span><span class="s">"  000000      000 0000    00 0000      0000        0000        0000        000 00      000 00        00        0000        0000          00       0000000       00        0    00   "</span>,
<span class="number"> 124</span><span class="s">"                                                                                                    00                                   00                                         "</span>,
<span class="number"> 125</span><span class="s">"                                                                                                 0000                                                                               "</span>,
<span class="number"> 126</span><span class="s">"      00         00           00          00                   000 00                                                                                                               "</span>,
<span class="number"> 127</span><span class="s">"     00         00           00          00        000 00     00 000       0000        0000         00                                00    00    00    00       00                 "</span>,
<span class="number"> 128</span><span class="s">"    00         00           00          00        00 000                  00  00      00  00        00                               000   00    000   00        00                 "</span>,
<span class="number"> 129</span><span class="s">"                                                              00   00     00  00      00  00                                          00  00      00  00                            "</span>,
<span class="number"> 130</span><span class="s">"   0000       0000         0000       00  00      00000       000  00      000000      0000         00        00000000    00000000    00 00       00 00          00         00  00  "</span>,
<span class="number"> 131</span><span class="s">"      00        00        00  00      00  00      00  00      0000 00                              00         00                00      00          00 000       00        00  00   "</span>,
<span class="number"> 132</span><span class="s">"   00000        00        00  00      00  00      00  00      00 0000     0000000     0000000     00          00                00     00 0000     00 0000      0000      00  00    "</span>,
<span class="number"> 133</span><span class="s">"  00  00        00        00  00      00  00      00  00      00  000                             00          00                00    00     00   00 00 00      0000      00  00    "</span>,
<span class="number"> 134</span><span class="s">"  00  00        00        00  00      00  00      00  00      00   00                             00  00                              0     00    0 00  00      0000       00  00   "</span>,
<span class="number"> 135</span><span class="s">"   000 00     000000       0000        000 00     00  00      00   00                              0000                                    00       000000       00         00  00  "</span>,
<span class="number"> 136</span><span class="s">"                                                                                                                                          00000         00                          "</span>,
<span class="number"> 137</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number"> 138</span><span class="s">"0  0  0  0   0 0 0 0 0 0 00 00 00 00     00          00          00        00  00                              00  00      00  00                  00  00      00  00        00     "</span>,
<span class="number"> 139</span><span class="s">" 0  0  0  0 0 0 0 0 0 0 00 00 00 00      00          00          00        00  00                              00  00      00  00                  00  00      00  00        00     "</span>,
<span class="number"> 140</span><span class="s">"  0  0  0  0 0 0 0 0 0 00 00 00 00 0     00          00          00        00  00                              00  00      00  00                  00  00      00  00        00     "</span>,
<span class="number"> 141</span><span class="s">"0  0  0  0  0 0 0 0 0 0  00 00 00 00     00          00     0000000        00  00               0000000     00000  00      00  00   000000000   00000  00      00  00   0000000     "</span>,
<span class="number"> 142</span><span class="s">" 0  0  0  0  0 0 0 0 0 000 00 00 00      00          00     0000000        00  00               0000000     00000  00      00  00   000000000   00000  00      00  00   0000000     "</span>,
<span class="number"> 143</span><span class="s">"  0  0  0  00 0 0 0 0 0 0 00 00 00 0     00     0000000          00     00000  00   000000000        00            00      00  00          00          00   000000000        00     "</span>,
<span class="number"> 144</span><span class="s">"0  0  0  0   0 0 0 0 0 0 00 00 00 00     00     0000000          00     00000  00   000000000        00            00      00  00          00          00   000000000        00     "</span>,
<span class="number"> 145</span><span class="s">" 0  0  0  0 0 0 0 0 0 0 00 00 00 00      00          00     0000000        00  00      00  00   0000000     00000  00      00  00   00000  00   000000000               0000000     "</span>,
<span class="number"> 146</span><span class="s">"  0  0  0  0 0 0 0 0 0 00 00 00 00 0     00          00     0000000        00  00      00  00   0000000     00000  00      00  00   00000  00   000000000               0000000     "</span>,
<span class="number"> 147</span><span class="s">"0  0  0  0  0 0 0 0 0 0  00 00 00 00     00          00          00        00  00      00  00        00        00  00      00  00      00  00                                       "</span>,
<span class="number"> 148</span><span class="s">" 0  0  0  0  0 0 0 0 0 000 00 00 00      00          00          00        00  00      00  00        00        00  00      00  00      00  00                                       "</span>,
<span class="number"> 149</span><span class="s">"  0  0  0  00 0 0 0 0 0 0 00 00 00 0     00          00          00        00  00      00  00        00        00  00      00  00      00  00                                       "</span>,
<span class="number"> 150</span><span class="s">"     00          00                      00                      00          00        00  00      00  00                  00  00                  00  00                  00  00   "</span>,
<span class="number"> 151</span><span class="s">"     00          00                      00                      00          00        00  00      00  00                  00  00                  00  00                  00  00   "</span>,
<span class="number"> 152</span><span class="s">"     00          00                      00                      00          00        00  00      00  00                  00  00                  00  00                  00  00   "</span>,
<span class="number"> 153</span><span class="s">"     00          00                      00                      00          0000000   00  00      00  00000   00000000000000  00000000000000000   00  0000000000000000000000  00000"</span>,
<span class="number"> 154</span><span class="s">"     00          00                      00                      00          0000000   00  00      00  00000   00000000000000  00000000000000000   00  0000000000000000000000  00000"</span>,
<span class="number"> 155</span><span class="s">"     0000000000000000000000000000000     0000000000000000000000000000000     00        00  00000   00          00                                  00                               "</span>,
<span class="number"> 156</span><span class="s">"     0000000000000000000000000000000     0000000000000000000000000000000     00        00  00000   00          00                                  00                               "</span>,
<span class="number"> 157</span><span class="s">"                             00          00                      00          0000000   00  00      000000000   00  0000000000000000000000  00000   00  0000000000000000000000  00000"</span>,
<span class="number"> 158</span><span class="s">"                             00          00                      00          0000000   00  00      000000000   00  0000000000000000000000  00000   00  0000000000000000000000  00000"</span>,
<span class="number"> 159</span><span class="s">"                             00          00                      00          00        00  00                  00  00                  00  00      00  00                  00  00   "</span>,
<span class="number"> 160</span><span class="s">"                             00          00                      00          00        00  00                  00  00                  00  00      00  00                  00  00   "</span>,
<span class="number"> 161</span><span class="s">"                             00          00                      00          00        00  00                  00  00                  00  00      00  00                  00  00   "</span>,
<span class="number"> 162</span><span class="s">"   00  00                              00  00        00                                00  00        00          00                 000000000000            000000            000000"</span>,
<span class="number"> 163</span><span class="s">"   00  00                              00  00        00                                00  00        00          00                 000000000000            000000            000000"</span>,
<span class="number"> 164</span><span class="s">"   00  00                              00  00        00                                00  00        00          00                 000000000000            000000            000000"</span>,
<span class="number"> 165</span><span class="s">"   00  00   000000000000               00  00        0000000     0000000               00  00   000000000000     00                 000000000000            000000            000000"</span>,
<span class="number"> 166</span><span class="s">"   00  00   000000000000               00  00        0000000     0000000               00  00   000000000000     00                 000000000000            000000            000000"</span>,
<span class="number"> 167</span><span class="s">"000000000000            000000000000000000000000     00          00        00000000000000  00000            0000000          0000000000000000000            000000            000000"</span>,
<span class="number"> 168</span><span class="s">"000000000000            000000000000000000000000     00          00        00000000000000  00000            0000000          0000000000000000000000000000000000000            000000"</span>,
<span class="number"> 169</span><span class="s">"            000000000000   00  00                    0000000     0000000   00  00      00  00   000000000000                 00     000000000000000000000000000000            000000"</span>,
<span class="number"> 170</span><span class="s">"            000000000000   00  00                    0000000     0000000   00  00      00  00   000000000000                 00     000000000000000000000000000000            000000"</span>,
<span class="number"> 171</span><span class="s">"                 00        00  00                                00        00  00      00  00        00                      00     000000000000000000000000000000            000000"</span>,
<span class="number"> 172</span><span class="s">"                 00        00  00                                00        00  00      00  00        00                      00     000000000000000000000000000000            000000"</span>,
<span class="number"> 173</span><span class="s">"                 00        00  00                                00        00  00      00  00        00                      00     000000000000000000000000000000            000000"</span>,
<span class="number"> 174</span><span class="s">"                                                                                                                                                                                    "</span>,
<span class="number"> 175</span><span class="s">"                0000       000000     00000000     000000                                          000000       0000       00000         0000                                0000   "</span>,
<span class="number"> 176</span><span class="s">"               00  00      00  00      00  00      00   0                                            00        00  00     00   00       00                         00       00      "</span>,
<span class="number"> 177</span><span class="s">"   000 00      00  00      00  00      00  00       00  0                              000 00       0000       00  00     00   00        00        000 00      00000       00       "</span>,
<span class="number"> 178</span><span class="s">"  00 0000      00 00       00          00  00       00          000000     00  00     00 000       00  00      00  00     00   00       0000      00 00 00    00 0000      00       "</span>,
<span class="number"> 179</span><span class="s">"  00  00       00  00      00          00  00        00        00  0       00  00        00        00  00      000000     00   00      00  00     00 00 00    00 0 00      000000   "</span>,
<span class="number"> 180</span><span class="s">"  00  00       00  00      00          00  00       00         00  00      00  00        00        00  00      00  00      00 00       00  00     00 00 00    0000 00      00       "</span>,
<span class="number"> 181</span><span class="s">"  00 0000      00  00      00          00  00       00  0      00  00      00  00        00         0000       00  00      00 00       00  00      00 000      00000       00       "</span>,
<span class="number"> 182</span><span class="s">"   000 00      00000       00          00  00      00   0      00  00      00  00        00          00        00  00      00 00       00  00                 00            00      "</span>,
<span class="number"> 183</span><span class="s">"               00          00          00   00     000000       0000       0000 00        000      000000       0000      000 000       0000                                 0000   "</span>,
<span class="number"> 184</span><span class="s">"                00                                                         00                                                                                                       "</span>,
<span class="number"> 185</span><span class="s">"                                                                          00                                                                                                        "</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

Is there a good way to load in XPM files with the same method?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gatleos)</author>
		<pubDate>Sat, 16 Jul 2011 04:29:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607852/924748#target">Gatleos</a> said:</div><div class="quote"><p>Is there a good way to load in XPM files with the same method?</p></div></div><p>
I don&#39;t think there is a native allegro function for loading xpm files.  But it doesn&#39;t look like it would be to hard to write.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 16 Jul 2011 04:43:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, that leaves one question: how does al_load_bitmap_f load the bitmap from the memfile? Is the memfile just an array of contiguous memory? Does each &quot;cell&quot; in the array represent the color of one pixel? What values should I assign to them to get different colors?</p><p>I guess that was more than one question.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gatleos)</author>
		<pubDate>Sat, 16 Jul 2011 07:08:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you&#39;re going to go the &quot;use only built-in stuff&quot; route, then just convert the xpm to a png or some other supported format and put the array of bytes in your code. If you want to use xpm, then you&#39;ll have to write a loader which you can register with the image addon.</p><p>Allegro (and most other graphics stuff) pack pixels into (most commonly) 16 or 32 bits per pixel. The easiest way to load that image you have there, assuming you want spaces to be blank and Os to be white, is to do something like that:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>myimage <span class="k3">=</span> <span class="k2">{</span>
   <span class="n">0x200</span>, <span class="n">0x0</span>, <span class="c">// put width here (this shows 16 bit little endian format)</span>
   <span class="n">0x200</span>, <span class="n">0x0</span>, <span class="c">// height</span>
   <span class="c">// your xpm here</span>
   <span class="n">0</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="c">// continue for all bytes (I'm assuming it's monochrome here, see below)</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

When you load the image, read the width and height then you get to the pixels. If it&#39;s monochrome then each byte could represent the color. If you want lots of colors, say 32 bit color, then you&#39;d use 4 bytes per pixel. Look up &quot;endianness&quot; on wikipedia for all the info about storing multibyte patterns in memory. I&#39;ll assume you&#39;re using monochrome images here.</p><p>Allegro let&#39;s you grab a memory buffer for an image and read/write to it as an array of bytes which represents the colors. Probably the easiest format to read and write is ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE. Here&#39;s some code for loading an image as described above.</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">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  2</span><span class="k1">int</span> width <span class="k3">=</span> myimage<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">|</span> <span class="k2">(</span>myimage<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">8</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// read about endianness to understand this</span>
<span class="number">  3</span>count <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  4</span><span class="k1">int</span> height <span class="k3">=</span> myimage<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">|</span> <span class="k2">(</span>myimage<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">8</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>count <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  6</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span><a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// clear the bitmap to pure alpha</span>
<span class="number">  9</span><a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lr <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>bmp, ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</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> height<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>   <span class="c">// uint32_t is an integer type that is always 32 bits big.</span>
<span class="number"> 13</span>   <span class="c">// this creates a pointer that points to the beginning of each row of the bitmap.</span>
<span class="number"> 14</span>   <span class="c">// as you go through the loop it's reset to the next line and so on.</span>
<span class="number"> 15</span>   <span class="k1">uint32_t</span> <span class="k3">*</span>ptr <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span>lr-&gt;data <span class="k3">+</span> lr-&gt;pitch <span class="k3">*</span> y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</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> width<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>      <span class="k1">int</span> byte <span class="k3">=</span> myimage<span class="k2">[</span>count<span class="k3">+</span><span class="k3">+</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 18</span>      <span class="k1">uint32_t</span> result<span class="k2">;</span>
<span class="number"> 19</span>      <span class="k1">unsigned</span> <span class="k1">char</span> r, g, b, a<span class="k2">;</span> <span class="c">// red, green, blue, alpha from 0-255 (none to full)</span>
<span class="number"> 20</span>      <span class="k1">if</span> <span class="k2">(</span>byte <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>         r <span class="k3">=</span> g <span class="k3">=</span> b <span class="k3">=</span> a <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">// zero byte is pure alpha</span>
<span class="number"> 22</span>      <span class="k2">}</span>
<span class="number"> 23</span>      <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 24</span>         r <span class="k3">=</span> g <span class="k3">=</span> b <span class="k3">=</span> a <span class="k3">=</span> <span class="n">255</span><span class="k2">;</span> <span class="c">// 1 is pure white</span>
<span class="number"> 25</span>      <span class="k2">}</span>
<span class="number"> 26</span>      <span class="c">// assemble the pixel. We locked it as ABGR_8888_LE which means the first byte</span>
<span class="number"> 27</span>      <span class="c">// is red, second green, third blue and last alpha</span>
<span class="number"> 28</span>      result <span class="k3">=</span> r <span class="k3">|</span> <span class="k2">(</span>g <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span>b <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span>a <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">24</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>      <span class="c">// These two lines first assign the resulting pixel we created to the current</span>
<span class="number"> 30</span>      <span class="c">// position in the bitmaps memory buffer, then advance that position by 1 pixel.</span>
<span class="number"> 31</span>      <span class="k2">(</span><span class="k3">*</span>ptr<span class="k2">)</span> <span class="k3">=</span> result<span class="k2">;</span>
<span class="number"> 32</span>      ptr<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 33</span>   <span class="k2">}</span>
<span class="number"> 34</span><span class="k2">}</span>
<span class="number"> 35</span>
<span class="number"> 36</span><a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
</div></div><p>

Voila, you&#39;ve loaded a bitmap (though the code is untested). You can simplify it by using al_put_pixel but that&#39;s significantly slower if you&#39;re using a lot of these bitmaps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sat, 16 Jul 2011 07:32:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607852/924758#target">Gatleos</a> said:</div><div class="quote"><p>Is the memfile just an array of contiguous memory? Does each &quot;cell&quot; in the array represent the color of one pixel? What values should I assign to them to get different colors?</p></div></div><p>Yes. No. You can&#39;t.</p><p>That&#39;s a png file (which was created using photoshop, and then later viewed as binary in hex in a hex editor).  I typed the hex into an array, put it into a virtual file, and then tell allegro to open it like it was png file.  You can&#39;t just change a value and change a pixel, it&#39;s a little more intricate than that.</p><p>Since you know the width and height of your image and you know exactly what images you&#39;re going to use, there&#39;s no need to include that in any new image format you may come up with.  <i>And</i> you also wouldn&#39;t need to come up with any color definitions, either.</p><p>In your case, probably easiest to just make an array of chars, where each char represents a color, getting those colors in a function:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">inline</span> <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> get_color_from_char<span class="k2">(</span><span class="k1">char</span> c<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">switch</span><span class="k2">(</span>c<span class="k2">)</span>
   <span class="k2">{</span>
      <span class="k1">case</span> <span class="s">'x'</span><span class="k2">:</span> <span class="k1">return</span> <a href="http://www.allegro.cc/manual/al_color_name"><span class="a">al_color_name</span></a><span class="k2">(</span><span class="s">"green"</span><span class="k2">)</span><span class="k2">;</span>
      <span class="k1">case</span> <span class="s">'y'</span><span class="k2">:</span> <span class="k1">return</span> <a href="http://www.allegro.cc/manual/al_color_name"><span class="a">al_color_name</span></a><span class="k2">(</span><span class="s">"orange"</span><span class="k2">)</span><span class="k2">;</span>
      <span class="k1">case</span> <span class="s">'#'</span><span class="k2">:</span> <span class="k1">return</span> <a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5f</span>, <span class="n">0</span>.<span class="n">5f</span>, <span class="n">0</span>.<span class="n">5f</span>, <span class="n">0</span>.<span class="n">5f</span><span class="k2">)</span><span class="k2">;</span>
      <span class="c">// etc //</span>
      default: <span class="k1">return</span> <a href="http://www.allegro.cc/manual/al_color_name"><span class="a">al_color_name</span></a><span class="k2">(</span><span class="s">"black"</span><span class="k2">)</span><span class="k2">;</span>
   <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

And compose your image with something like this (also untested):</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_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>load_my_pic<span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span>array, <span class="k1">int</span> width, <span class="k1">int</span> height<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>width, height<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_STATE"><span class="a">ALLEGRO_STATE</span></a> state<span class="k2">;</span>
<span class="number">  5</span>   <a href="http://www.allegro.cc/manual/al_store_state"><span class="a">al_store_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>state, ALLEGRO_STATE_TARGET_BITMAP<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>   <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>bitmap, <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>bitmap<span class="k2">)</span>, ALLEGRO_LOCK_WRITEONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>   <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>   <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</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>height<span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 11</span>   <span class="k2">{</span>
<span class="number"> 12</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>width<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 13</span>      <span class="k2">{</span>
<span class="number"> 14</span>         <a href="http://www.allegro.cc/manual/al_put_pixel"><span class="a">al_put_pixel</span></a><span class="k2">(</span>x, y, get_color_from_char<span class="k2">(</span>array<span class="k2">[</span>x <span class="k3">+</span> y<span class="k3">*</span>width<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>      <span class="k2">}</span>
<span class="number"> 16</span>   <span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span>   <a href="http://www.allegro.cc/manual/al_restore_state"><span class="a">al_restore_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</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>
<span class="number"> 20</span>   <span class="k1">return</span> bitmap<span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
</div></div><p>

</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607852/924759#target">Trent Gamblin</a> said:</div><div class="quote"><p>al_put_pixel but that&#39;s significantly slower if you&#39;re using a lot of these bitmaps.</p></div></div><p>actually.... I profiled some different methods a while back and found that al_put_pixel performed as fast (marginally faster) than packing the bits manually (you have to lock the bitmap other wise it&#39;s slow as molasses, obviously).  I had a thread on it some time back.</p><p>No matter what the performance was too slow for real-time use beyond 10,000pixels/frame or so if I recall correctly.  I would only use it for loading and such.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 16 Jul 2011 08:52:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607852/924767#target">Mark Oates</a> said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre>         <a href="http://www.allegro.cc/manual/al_put_pixel"><span class="a">al_put_pixel</span></a><span class="k2">(</span>x, y, get_color_from_char<span class="k2">(</span>array<span class="k2">[</span>x<span class="k3">+</span>y<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>
Shouldn&#39;t that be <span class="source-code">array<span class="k2">[</span>y<span class="k3">*</span>width <span class="k3">+</span> x<span class="k2">]</span></span> there?</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607852/924746#target">Gatleos</a> said:</div><div class="quote"><p>
That seems like an awfully important thing to &quot;forget&quot; to port to Allegro 5... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>Anyway, thanks. This should help a lot!</p><p>EDIT: Wait... is there any documentation that shows the source code, or am I just going to have to download Allegro 4 and comb through the source?
</p></div></div><p>
The functions are in allegro\src\win\gdi.c on lines 505-535 and 539-568. They use several helper functions though, so you&#39;ll have to look those up yourself. I suggest using <a href="http://gnuwin32.sourceforge.net/packages/grep.htm">grep for windows</a> to do it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 16 Jul 2011 08:57:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607852/924768#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Shouldn&#39;t that be array[y*width + x] there?</p></div></div><p>Dangit! I made that <i>same</i> mistake a week ago and it took me ~15 min to debug!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sat, 16 Jul 2011 09:09:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for all the help! You were right; I already know the size of the bitmap in question, only one bitmap will be loaded at a time, and it&#39;s only got two colors, one of which is transparency. So it&#39;s pretty simple, I just needed to know how to load it in.</p><p>Thanks again!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gatleos)</author>
		<pubDate>Sat, 16 Jul 2011 09:37:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This won&#39;t really help you much but I just had to write some <a href="https://plus.google.com/107211826750778081852/posts/fNFhQrZvqYM">ALLEGRO_BITMAP to HBITMAP</a> code.</p><p>I think you can get by with using <span class="source-code">GetDIBits</span> to go in the other direction, along with some supporting code similar to what I&#39;ve linked above.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 16 Jul 2011 10:56:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There is a simple way of doing this with WindowsAPI. But LennyLen&#39;s code should work for you and his is cross platform <a href="http://www.allegro.cc/forums/thread/604040/865263#target">load_PE_bmp</a>. It opens PE files and should also get the bitmap data from the executable. He has posted an example of using it and the source is also included so you can see how he done it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Desmond Taylor)</author>
		<pubDate>Sat, 16 Jul 2011 15:34:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607852/924767#target">Mark Oates</a> said:</div><div class="quote"><p>
actually.... I profiled some different methods a while back and found that al_put_pixel performed as fast (marginally faster) than packing the bits manually (you have to lock the bitmap other wise it&#39;s slow as molasses, obviously). I had a thread on it some time back.
</p></div></div><p>

That&#39;s quite not possible since al_put_pixel packs the bits itself and then you have the extra function call overhead. If done right (and I&#39;ve benchmarked this too), manual locking and packing is quite a lot faster. And even if it was inline, you have to pack and unpack pixels into ALLEGRO_COLORs on top of it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Sat, 16 Jul 2011 16:20:14 +0000</pubDate>
	</item>
</rss>
