<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Load bitmap from zip file</title>
		<link>http://www.allegro.cc/forums/view/614268</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 26 May 2014 00:54:21 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Im trying to convert my A4 project to A5 but im having some issues...<br />Been searching for hours and i cant load bitmaps directly from a zip file.</p><p>Can anyone post a small example please?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DarknessEyes)</author>
		<pubDate>Tue, 20 May 2014 04:31:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What have you tried so far? You need to use the PhysFS addon to load from an archive file.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 20 May 2014 04:36:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s actually fairly simple to use with PhsyFS that&#39;s a file system addon, not a physics addon <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Here&#39;s what I have (trimmed out the error checking code)
</p><div class="source-code snippet"><div class="inner"><pre>   PHYSFS_init<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>PHYSFS_mount<span class="k2">(</span><span class="s">"MyGame.zip"</span>, <span class="s">"/"</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
      <span class="c">// do error stuff here</span>
   <span class="k2">}</span>
   <a href="http://www.allegro.cc/manual/al_set_physfs_file_interface"><span class="a">al_set_physfs_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

You&#39;ll need to <span class="source-code"><span class="p">#include &lt;allegro5/allegro_physfs.h&gt;</span></span> as well for this.</p><p>Note, you can rename your file anything you wish, like &quot;MyGame.dat&quot;, no need to have &quot;zip&quot; on there if you don&#39;t want it so obvious.</p><p>Once this is done, all file loading will be from that file.  I have folders in my ZIP as well containing graphics, sounds etc... so when I load them I use something like...</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>myimage <span class="k3">=</span> NULL<span class="k2">;</span>
myimage <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Graphics/MyImage.png"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

...and it will load the PNG &quot;MyImage.png&quot; from the &quot;Graphics&quot; folder inside your zip file.</p><p>Important, if you wish to access a file outside of the zip you need to <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_standard_file_interface"><span class="a">al_set_standard_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></span> first, then do your normal file access, and when you&#39;re done, use <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_physfs_file_interface"><span class="a">al_set_physfs_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></span> to switch back to your ZIP.</p><p>Another way to do this, and probably a better one, is to use:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_STATE"><span class="a">ALLEGRO_STATE</span></a> state<span class="k2">;</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_NEW_FILE_INTERFACE<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_set_standard_file_interface"><span class="a">al_set_standard_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

<span class="c">// do your file access here</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>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Tue, 20 May 2014 08:19:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><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="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  2</span><span class="p">#include "allegro5/allegro_image.h"</span>
<span class="number">  3</span><span class="p">#include &lt;physfs.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;allegro5/allegro_physfs.h&gt;</span>
<span class="number">  5</span><span class="p">#include &lt;iostream&gt; /// namespace std</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 11</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>image <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 12</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed: al_init"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 14</span>   <span class="k2">}</span>
<span class="number"> 15</span> 
<span class="number"> 16</span>   display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">800</span>,<span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 18</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed: al_create_display"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 19</span>   <span class="k2">}</span>
<span class="number"> 20</span> 
<span class="number"> 21</span>   PHYSFS_init<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>PHYSFS_mount<span class="k2">(</span><span class="s">"data.zip"</span>, <span class="s">"/"</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed: PHYSFS_mount - "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> PHYSFS_getLastError<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 24</span>   <span class="k2">}</span>
<span class="number"> 25</span>   <a href="http://www.allegro.cc/manual/al_set_physfs_file_interface"><span class="a">al_set_physfs_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>   
<span class="number"> 27</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>PHYSFS_exists<span class="k2">(</span><span class="s">"image.bmp"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 28</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Failed: PHYSFS_exists - "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> PHYSFS_getLastError<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 29</span>   <span class="k2">}</span>
<span class="number"> 30</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 31</span>        image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"image.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>   <span class="k2">}</span>
<span class="number"> 33</span>   
<span class="number"> 34</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>image<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 35</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"loading backup.bmp"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>        
<span class="number"> 36</span>      <a href="http://www.allegro.cc/manual/al_set_standard_file_interface"><span class="a">al_set_standard_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>      image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"backup.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>   <span class="k2">}</span>
<span class="number"> 39</span>
<span class="number"> 40</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_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</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"> 41</span>   <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>image,<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="number"> 42</span>   <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>        
<span class="number"> 44</span>   <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">5</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span> 
<span class="number"> 46</span>   <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span> 
<span class="number"> 48</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 49</span><span class="k2">}</span>
</div></div><p>

I have the following code to test.</p><p>All i get is:</p><p><b>
Start
loading backup.bmp
&lt;crash&gt;
</b>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DarknessEyes)</author>
		<pubDate>Tue, 20 May 2014 22:27:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>is the zip file actually where your program expects it?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Tue, 20 May 2014 22:35:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It works!!! i forgot to add the al_init_image_addon() in the test code.</p><p>Lets see if it works in the real project now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DarknessEyes)</author>
		<pubDate>Wed, 21 May 2014 02:19:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good to see you got it working. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Wed, 21 May 2014 05:39:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You may also want to incorporate ALLEGRO_PATH to set the working directory so that your archive can be read no matter what directory it was executed from (this comes in handy if you run the application binary from a command line from within a different directory). I used the following in one of my projects:</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">void</span> Routines::setResourceArchive<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>    <span class="c">// Get current working directory.</span>
<span class="number">  4</span>    ALLEGRO_PATH <span class="k3">*</span>al_path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_standard_path"><span class="a">al_get_standard_path</span></a><span class="k2">(</span>ALLEGRO_RESOURCES_PATH<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  
<span class="number">  6</span>    <span class="c">// Switch to directory in which application was run from.</span>
<span class="number">  7</span>    <a href="http://www.allegro.cc/manual/al_append_path_component"><span class="a">al_append_path_component</span></a><span class="k2">(</span>al_path, <span class="s">"./"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_change_directory"><span class="a">al_change_directory</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>al_path, <span class="s">'/'</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="c">// Remove path from memory, as the new directory has been reached.</span>
<span class="number"> 11</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>al_path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    <span class="c">// @NOTE: evaluate() breaks the game loop if the supplied condition fails.</span>
<span class="number"> 14</span>  
<span class="number"> 15</span>    evaluate<span class="k2">(</span>PHYSFS_init<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <span class="c">// Attempt to read contents of data.dat.</span>
<span class="number"> 18</span>    evaluate<span class="k2">(</span>PHYSFS_mount<span class="k2">(</span><span class="s">"data.dat"</span>, <span class="s">"/"</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>    <span class="c">// All future loading calls will read from data.dat.</span>
<span class="number"> 21</span>    <a href="http://www.allegro.cc/manual/al_set_physfs_file_interface"><span class="a">al_set_physfs_file_interface</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Eric Johnson)</author>
		<pubDate>Mon, 26 May 2014 00:54:21 +0000</pubDate>
	</item>
</rss>
