<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Al_save_bitmap only saves a blank png</title>
		<link>http://www.allegro.cc/forums/view/614551</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 15 Aug 2014 21:48:48 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hey guys, I&#39;m trying to make a function that saves a screenshot to a folder. I have it creating the .png&#39;s correcting but all of them are blank.</p><p>I am able to draw to the screen and I have tried to flipping the screen before and after screenshotting but neither does anything.</p><p>Here is what my screen looks like and what the screenshots look like.<br /><a href="http://imgur.com/a/6LzYu">http://imgur.com/a/6LzYu</a></p><p>Here is the code that produces my screenshots. The actual al_save_bitmap call is near the bottom but I thought it good measure to include it all.</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> AllegroEngine::FlushScreenshot<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>destination_path, std::string myWorldName,<span class="k1">int</span> myCurrentYear,<span class="k1">int</span> myCurrentMonth, <span class="k1">int</span> myCurrentDay<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  ALLEGRO_PATH <span class="k3">*</span>path<span class="k2">;</span>
<span class="number">  4</span>  <span class="k1">char</span> <span class="k3">*</span>filename<span class="k2">;</span>
<span class="number">  5</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>path_cstr<span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">int</span> char_index <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>  <span class="c">//Testing the destination given</span>
<span class="number">  9</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>destination_path<span class="k2">)</span>
<span class="number"> 10</span>    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_USER_DOCUMENTS_PATH<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="k1">else</span>
<span class="number"> 12</span>    path <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_path_for_directory"><span class="a">al_create_path_for_directory</span></a><span class="k2">(</span>destination_path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>path<span class="k2">)</span>
<span class="number"> 15</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span><span class="c">//Where we want it is bad</span>
<span class="number"> 16</span>
<span class="number"> 17</span>
<span class="number"> 18</span>  <span class="c">//Length of    gamename           :    YYYY-   MM  -   DD  NULL terminator</span>
<span class="number"> 19</span>  <span class="k1">int</span> bytes <span class="k3">=</span> myWorldName.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span> <span class="k3">+</span> <span class="n">4</span> <span class="k3">+</span> <span class="n">1</span> <span class="k3">+</span> <span class="n">2</span> <span class="k3">+</span> <span class="n">1</span> <span class="k3">+</span> <span class="n">2</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>filename <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>bytes<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> 
<span class="number"> 21</span>  <span class="k2">{</span>
<span class="number"> 22</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">4</span><span class="k2">;</span><span class="c">//We don't have enough space?</span>
<span class="number"> 24</span>  <span class="k2">}</span>
<span class="number"> 25</span>
<span class="number"> 26</span>  <span class="c">//Creating the file name</span>
<span class="number"> 27</span>  std::string name <span class="k3">=</span> myWorldName <span class="k3">+</span> <span class="s">"-"</span><span class="k3">+</span> std::to_string<span class="k2">(</span>myCurrentYear<span class="k2">)</span><span class="k3">+</span><span class="s">"-"</span><span class="k3">+</span>std::to_string<span class="k2">(</span>myCurrentMonth<span class="k2">)</span><span class="k3">+</span><span class="s">"-"</span> <span class="k3">+</span> std::to_string<span class="k2">(</span>myCurrentDay<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> c <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> c <span class="k3">&lt;</span> name.length<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> c<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 30</span>  <span class="k2">{</span>
<span class="number"> 31</span>    filename<span class="k2">[</span>char_index<span class="k2">]</span> <span class="k3">=</span> name<span class="k2">[</span>c<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 32</span>    char_index<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>  filename<span class="k2">[</span>char_index<span class="k2">]</span> <span class="k3">=</span> <span class="s">'\0'</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span>  <span class="c">//Setting up file specificiations</span>
<span class="number"> 37</span>  <a href="http://www.allegro.cc/manual/al_set_path_filename"><span class="a">al_set_path_filename</span></a><span class="k2">(</span>path, filename<span class="k2">)</span><span class="k2">;</span><span class="c">//Where are we writing this</span>
<span class="number"> 38</span>  <a href="http://www.allegro.cc/manual/al_set_path_extension"><span class="a">al_set_path_extension</span></a><span class="k2">(</span>path, <span class="s">".png"</span><span class="k2">)</span><span class="k2">;</span><span class="c">//We are creating a png</span>
<span class="number"> 39</span>  path_cstr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_path_cstr"><span class="a">al_path_cstr</span></a><span class="k2">(</span>path, ALLEGRO_NATIVE_PATH_SEP<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>
<span class="number"> 41</span>
<span class="number"> 42</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_filename_exists"><span class="a">al_filename_exists</span></a><span class="k2">(</span>path_cstr<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 43</span>  <span class="k2">{</span>
<span class="number"> 44</span>    <span class="c">//Saving the bitmap</span>
<span class="number"> 45</span>    std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"Screenshot saved at "</span><span class="k3">&lt;</span><span class="k3">&lt;</span>path_cstr<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">" named "</span><span class="k3">&lt;</span><span class="k3">&lt;</span>filename<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"."</span><span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span>
<span class="number"> 46</span>    <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span>path_cstr,<a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>main_display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 48</span>  <span class="k2">}</span>
<span class="number"> 49</span>  <span class="k1">else</span>
<span class="number"> 50</span>  <span class="k2">{</span>
<span class="number"> 51</span>    <span class="c">//We've already printed out this file</span>
<span class="number"> 52</span>    <span class="k1">delete</span><span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 53</span>    <a href="http://www.allegro.cc/manual/al_destroy_path"><span class="a">al_destroy_path</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 54</span>  <span class="k2">}</span>
<span class="number"> 55</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">6</span><span class="k2">;</span><span class="c">//We never placed a file</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (TheNextGuy)</author>
		<pubDate>Thu, 14 Aug 2014 04:30:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t save from the backbuffer. It&#39;s contents are usually lost when you flip the display. And you won&#39;t be referring to the same bitmap as the one being displayed anyway.</p><p>Try using a buffer bitmap or just redraw to a buffer when you want to save it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 14 Aug 2014 04:41:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is a function I came up with to do just that and it works beautifully.  Saves the screenshot with a date and time extension so if you save multiple screenshots they will all be named differently, just need to pass it the name of the game &quot;My_Game&quot; and that will be used with the date and time appended...</p><p>a5_screenshot.c
</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">// Note: if you use physfs, than you need to call al_set_standard_file_interface();</span>
<span class="number">  2</span><span class="c">// before this function and al_set_physfs_file_interface(); afterwards.</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include "a5_screenshot.h"</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">bool</span> a5_screenshot<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>gamename<span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>   time_t rawtime<span class="k2">;</span>
<span class="number">  9</span>   <span class="k1">struct</span> tm <span class="k3">*</span>timeinfo<span class="k2">;</span>
<span class="number"> 10</span>   <span class="k1">char</span> filename<span class="k2">[</span><span class="n">80</span><span class="k2">]</span>, timestr<span class="k2">[</span><span class="n">80</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 11</span>   <span class="k1">bool</span> saved<span class="k2">;</span>
<span class="number"> 12</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"> 13</span>
<span class="number"> 14</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>
<span class="number"> 15</span>
<span class="number"> 16</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"> 17</span>
<span class="number"> 18</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span><span class="k3">&amp;</span>rawtime<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   timeinfo <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_538.html" target="_blank">localtime</a><span class="k2">(</span><span class="k3">&amp;</span>rawtime<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_760.html" target="_blank">strftime</a><span class="k2">(</span>timestr, <span class="n">80</span>, <span class="s">"%Y%m%d_%H%M%S"</span>, timeinfo<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_732.html" target="_blank">snprintf</a><span class="k2">(</span>filename, <span class="n">80</span>, <span class="s">"%s_%s.png"</span>, gamename, timestr<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>   saved <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span>filename, <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</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"> 27</span>
<span class="number"> 28</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>saved<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 29</span>
<span class="number"> 30</span>   <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 31</span><span class="k2">}</span>
</div></div><p>

a5_screenshot.h
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#ifndef _a5_screenshot_h_</span>
<span class="p">#define _a5_screenshot_h_</span>

<span class="p">#include "allegro5/allegro.h"</span>
<span class="p">#include &lt;stdio.h&gt;</span>

<span class="k1">bool</span> a5_screenshot<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>gamename<span class="k2">)</span><span class="k2">;</span>

<span class="p">#endif //_a5_screenshot_h_</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Thu, 14 Aug 2014 04:52:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>With that code, just make sure to call it before an al_flip_display if you&#39;re trying to save from the backbuffer. If not, then it doesn&#39;t really matter.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 14 Aug 2014 05:01:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Even when I say al_get_target_buffer it comes up blank. With both target and back buffer and whether or not the screen flipping comes before, after, or not all makes no difference.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (TheNextGuy)</author>
		<pubDate>Thu, 14 Aug 2014 05:35:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Dumb question : Have you init&#39;ed the image addon? <span class="source-code"><a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 14 Aug 2014 09:28:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes I have. The solution NickHackr presented is deprecated but even when updated it does not work. It creates blank png&#39;s all the same. </p><p>I have tried setting it to al_get_target_bitmap() and moving and deleting the flipping to no avail.</p><p>I suspect it has to do with drawing improperly or something. I only ever draw primitives. For instance:</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> Game::DrawBlade<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">unsigned</span> <span class="k1">char</span> r,<span class="k1">unsigned</span> <span class="k1">char</span> g,<span class="k1">unsigned</span> <span class="k1">char</span> b<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/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x,y<span class="k3">+</span><span class="n">1</span>,x,y-4,<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="n">1</span><span class="k2">)</span><span class="k2">;</span><span class="c">//Shadow</span>
<span class="number"> 4</span>  <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x,y-1,x,y-5,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span>r,g,b<span class="k2">)</span>,<span class="n">3</span><span class="k2">)</span><span class="k2">;</span><span class="c">//Actual</span>
<span class="number"> 5</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

I&#39;d like to note that my &quot;engine&quot; class has only static members. Static screen and static functions. However the thing that draws to it- the game class -is not static.</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> AllegroEngine::InitializeAllegro<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</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="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"Al init failed."</span><span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span>
<span class="number">  6</span>  <span class="k2">}</span>
<span class="number">  7</span>  <span class="c">//allegro-5.0.10-monolith-md-debug.lib</span>
<span class="number">  8</span>
<span class="number">  9</span>  <span class="c">//Anti Aliasing</span>
<span class="number"> 10</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLE_BUFFERS, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLES, <span class="n">8</span>, ALLEGRO_SUGGEST<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>  <span class="c">//Initializing Addons</span>
<span class="number"> 14</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  <a href="http://www.allegro.cc/manual/al_install_audio"><span class="a">al_install_audio</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>  <a href="http://www.allegro.cc/manual/al_init_acodec_addon"><span class="a">al_init_acodec_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>  <a href="http://www.allegro.cc/manual/al_reserve_samples"><span class="a">al_reserve_samples</span></a><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span>  std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"Allegro initialized."</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>  InitializeFonts<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="k1">void</span> AllegroEngine::InitializeScreen<span class="k2">(</span><span class="k1">int</span> myScreenWidth, <span class="k1">int</span> myScreenHeight<span class="k2">)</span>
<span class="number"> 30</span><span class="k2">{</span>
<span class="number"> 31</span>  screen_width <span class="k3">=</span> myScreenWidth<span class="k2">;</span>
<span class="number"> 32</span>  screen_height <span class="k3">=</span> myScreenHeight<span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span>  <span class="c">//Creating screen</span>
<span class="number"> 35</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> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>myScreenWidth, myScreenHeight<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>  <a href="http://www.allegro.cc/manual/al_set_window_position"><span class="a">al_set_window_position</span></a><span class="k2">(</span>display,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>  <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>display,<span class="s">"World Simulation"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>  main_display <span class="k3">=</span> display<span class="k2">;</span>
<span class="number"> 39</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (TheNextGuy)</author>
		<pubDate>Thu, 14 Aug 2014 10:06:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I can load and save a png just fine here. Even off the backbuffer.</p><p>Try this test code with the attached test.png and see what results it gives you on your computer.</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="number">  2</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include "allegro5/allegro.h"</span>
<span class="number">  5</span><span class="p">#include "allegro5/allegro_image.h"</span>
<span class="number">  6</span>
<span class="number">  7</span>
<span class="number">  8</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">  9</span>   
<span class="number"> 10</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="k1">return</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 11</span>   <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>   
<span class="number"> 13</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_WINDOWED <span class="k3">|</span> ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</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> <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">200</span>,<span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>   
<span class="number"> 16</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> testbmp <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">"test.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>   
<span class="number"> 18</span>   <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><span class="s">"testsave.png"</span> , testbmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   
<span class="number"> 20</span>   <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</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">255</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>   <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>testbmp , <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"> 23</span>   
<span class="number"> 24</span>   <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><span class="s">"testbackbuffersave.png"</span> , <a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>   
<span class="number"> 26</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"> 27</span>   
<span class="number"> 28</span>   <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">3</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>   
<span class="number"> 30</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 31</span><span class="k2">}</span>
</div></div><p>
It works for me on Windows Vista with MinGW 4.8.1 using either DirectX or OpenGL driver.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 14 Aug 2014 10:43:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edgar my man it works. I fiddled with it so much I don&#39;t quite know what the exact solution is. </p><p>Thanks a gorillian.</p><p>I&#39;ve attached a working screenshot x)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (TheNextGuy)</author>
		<pubDate>Thu, 14 Aug 2014 13:59:57 +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/614551/1004137#target">Thomas Fjellstrom</a> said:</div><div class="quote"><p>With that code, just make sure to call it before an al_flip_display if you&#39;re trying to save from the backbuffer. If not, then it doesn&#39;t really matter. </p></div></div><p>

I used it all through my game.  I added calls to it from my title screen, my menu screen, my main game screen etc... never had a problem.</p><p>But I will keep what you said in mind.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 15 Aug 2014 08:44:57 +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/614551/1004172#target">NiteHackr</a> said:</div><div class="quote"><p>I used it all through my game. I added calls to it from my title screen, my menu screen, my main game screen etc... never had a problem.</p></div></div><p>The main issue is that there is no guarantee that the backbuffer after a flip has anything in it that makes sense. It could be what you drew to it the frame before last, 5 frames ago, or garbage. (this is why they say it&#39;s undefined or implementation defined).</p><p>Often I think the &quot;implementation&quot; is just to keep N frames around for page flipping, and hand you back a previous frame on a flip. so for the most part it looks fine, but may not give you back the exact frame you expected if you called it after a flip, but before drawing. (not that it often matters, but it might if you&#39;re trying to use the screenshots for debugging)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Fri, 15 Aug 2014 09:30:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I may go over my code and make sure my screenshot code is after a draw, just to be safe.  Perhaps detect the screenshot key, flag the next draw for a save, then add code in after the draw, but before the flip to respond on that.  Hmmm...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Fri, 15 Aug 2014 21:48:48 +0000</pubDate>
	</item>
</rss>
