<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro5 Save bitmap to byte array</title>
		<link>http://www.allegro.cc/forums/view/614260</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 19 May 2014 16:20:26 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello everyone,<br />I am looking to convert a sub bitmap to a byte array to save into an SQLite database. I have done it in .NET but I am having a lot of trouble doing it in C++. What I have now looks something like this:</p><p>size_t *size = new size_t();<br />ALLEGRO_FILE *SavFil = malloc(size);<br />al_save_bitmap_f(SavFil, &quot;.bmp&quot;, al_create_sub_bitmap(World, x, y, 16, 16));</p><p>but that is totally wrong. How do I access the byte info inside of ALLEGRO_FILE?<br />do I need to use ALLEGRO_FILE_INTERFACE to access that information? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /><br />Thanks for the help!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin NO)</author>
		<pubDate>Fri, 16 May 2014 08:03:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You will need to use the memfile addon and <span class="source-code"><a href="http://www.allegro.cc/manual/al_open_memfile"><span class="a">al_open_memfile</span></a><span class="k2">(</span><span class="k2">)</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Fri, 16 May 2014 10:41:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the quick reply! I am trying to use the memfile, here is what I have:</p><p>SubBmp = al_create_sub_bitmap(World, x, y, 16, 16);<br />			al_draw_bitmap(SubBmp, 0,0,NULL);<br />			al_flip_display();</p><p>			data_size = al_get_bitmap_width(SubBmp) * al_get_bitmap_height(SubBmp) * al_get_pixel_size(al_get_bitmap_format(SubBmp));<br />			<br />			ALLEGRO_BITMAP *bmp = al_create_sub_bitmap(World, x, y, 16, 16);<br />			data = (char*)calloc(1, data_size);<br />			ALLEGRO_FILE *memfile = al_open_memfile(buffer, data_size, &quot;w+b&quot;);<br />			bool result = al_save_bitmap_f(memfile, &quot;.bmp&quot;, SubBmp);<br />			size_t bytes = al_fread(memfile, buffer, data_size);</p><p>			//Test if buffer has bitmap array<br />			FILE *fp;<br />			fp=fopen(&quot;c:\\test.bin&quot;, &quot;wb&quot;);<br />			fwrite(buffer, sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp);</p><p>			al_fclose(memfile);<br />			free(data);</p><p>Still nothing in the buffer, or at lest i don&#39;t think there is.<br />This also seems like the wrong way of doing it. If you guys could help me on the right path I would really appreciate it. Thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin NO)</author>
		<pubDate>Sat, 17 May 2014 08:33:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I wouldn&#39;t do it quite that way. It would be easier to lock the bitmap and read the data directly.</p><p>Ex :
</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">unsigned</span> <span class="k1">char</span><span class="k3">*</span> BitmapBytes<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bmp , <span class="k1">int</span><span class="k3">*</span> size_store<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>   <span class="k1">int</span> size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">*</span><a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">*</span><span class="n">4</span><span class="k2">;</span>
<span class="number">  3</span>   <span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span> buffer <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span>size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>   <span class="k1">if</span> <span class="k2">(</span>buffer<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  5</span>      <span class="k3">*</span>size_store <span class="k3">=</span> size<span class="k2">;</span>
<span class="number">  6</span>   <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  7</span>      <span class="k3">*</span>size_store <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  8</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  9</span>   <span class="k2">}</span>
<span class="number"> 10</span>
<span class="number"> 11</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_539.html" target="_blank">lock</a> <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_RGBA_8888 , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> y <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>      <span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span> dat <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>lock-&gt;data <span class="k3">+</span> <span class="n">4</span><span class="k3">*</span>y<span class="k3">*</span>lock-&gt;pitch<span class="k2">;</span>
<span class="number"> 15</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span>buffer <span class="k3">+</span> <span class="n">4</span><span class="k3">*</span>y<span class="k3">*</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span> , dat , <span class="n">4</span><span class="k3">*</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">)</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_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>   <span class="k1">return</span> buffer<span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
</div></div><p>
Untested, but you get the idea. The bitmap is locked using RGBA_8888 (allegro will perform necessary conversions for you), and then a simple memcpy copies the memory into the newly allocated buffer and the function returns the buffer and stores the size in the int pointer provided to the function.</p><p>You can use &lt;code&gt;code goes here...&lt;/code&gt; tags to show your code. Makes it easier to read.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 17 May 2014 09:34:16 +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/614260/1000839#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Untested, but you get the idea. The bitmap is locked using RGBA_8888 (allegro will perform necessary conversions for you), and then a simple memcpy copies the memory into the newly allocated buffer and the function returns the buffer and stores the size in the int pointer provided to the function.</p></div></div><p>Depends if he wants the actual bitmap headers or not.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 17 May 2014 09:46:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, in that case I would just save the bitmap to a temporary file on the hard drive and not mess around with a memfile. It would be much easier to get a fix on the actual size of the bitmap file.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 17 May 2014 09:58:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Depends if he wants it to hit the disk or not <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 17 May 2014 10:14:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The point I was trying to make is that he has to know the exact layout of the file if he wants the headers and he is going to use a memfile, otherwise he doesn&#39;t know the exact size of the buffer he needs. That&#39;s why I suggested saving to disk.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 17 May 2014 17:10:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In the code above, where does buffer come from? you shoyld use data to initailze the memfile and save that, I think. Also , you seem to draw to the wrong bitmap. It&#39;s hard to say without the complete code. Could you psot a complete, compilable  example of what you&#39;re trying to do?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Sat, 17 May 2014 23:32:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello, What I am trying to do is read a Large bitmap into a database.<br />It should be easy, but I am having more trouble than I was thinking it was.<br />here is my full code:
</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">/*</span>
<span class="number">   2</span><span class="c">#include &lt;stdio.h&gt;</span>
<span class="number">   3</span><span class="c">#ifdef _MSC_VER</span>
<span class="number">   4</span><span class="c">#pragma comment ( linker, "/SUBSYSTEM:CONSOLE")</span>
<span class="number">   5</span><span class="c">#endif #define ALLEGRO_USE_CONSOLE</span>
<span class="number">   6</span><span class="c">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   7</span><span class="c">#include &lt;allegro5/allegro_memfile.h&gt;</span>
<span class="number">   8</span><span class="c"></span>
<span class="number">   9</span><span class="c">int main(void)</span>
<span class="number">  10</span><span class="c">{</span>
<span class="number">  11</span><span class="c">  ALLEGRO_FILE *memfile;</span>
<span class="number">  12</span><span class="c">  char *data;</span>
<span class="number">  13</span><span class="c">  int i;</span>
<span class="number">  14</span><span class="c">  const int data_size = 1024;</span>
<span class="number">  15</span><span class="c">  char buffer[50];</span>
<span class="number">  16</span><span class="c">  if (!al_init())</span>
<span class="number">  17</span><span class="c">  {</span>
<span class="number">  18</span><span class="c">    //abort_example("Could not init Allegro.\n");</span>
<span class="number">  19</span><span class="c">  }</span>
<span class="number">  20</span><span class="c">  data = (char*)calloc(1, data_size);</span>
<span class="number">  21</span><span class="c">  if (!data) return 1;</span>
<span class="number">  22</span><span class="c">  printf("Creating memfile\n");</span>
<span class="number">  23</span><span class="c">  memfile = al_open_memfile(data, data_size, "rw");</span>
<span class="number">  24</span><span class="c">  if (!memfile)</span>
<span class="number">  25</span><span class="c">  {</span>
<span class="number">  26</span><span class="c">    printf("Error opening memfile :(\n");</span>
<span class="number">  27</span><span class="c">    goto Error;</span>
<span class="number">  28</span><span class="c">  }</span>
<span class="number">  29</span><span class="c">  printf("Writing data to memfile\n");</span>
<span class="number">  30</span><span class="c">  for (i = 0; i &lt; data_size/4; i++)</span>
<span class="number">  31</span><span class="c">  {</span>
<span class="number">  32</span><span class="c">    if (al_fwrite32le(memfile, i) &lt; 4)</span>
<span class="number">  33</span><span class="c">    {</span>
<span class="number">  34</span><span class="c">      printf("Failed to write %i to memfile\n", i);</span>
<span class="number">  35</span><span class="c">      goto Error;</span>
<span class="number">  36</span><span class="c">    }</span>
<span class="number">  37</span><span class="c">  }</span>
<span class="number">  38</span><span class="c">  al_fseek(memfile, 0, ALLEGRO_SEEK_SET);</span>
<span class="number">  39</span><span class="c">  printf("Reading and testing data from memfile\n");</span>
<span class="number">  40</span><span class="c">  for (i = 0; i &lt; data_size/4; i++)</span>
<span class="number">  41</span><span class="c">  {</span>
<span class="number">  42</span><span class="c">    int32_t ret = al_fread32le(memfile);</span>
<span class="number">  43</span><span class="c">    if (ret != i || al_feof(memfile))</span>
<span class="number">  44</span><span class="c">    {</span>
<span class="number">  45</span><span class="c">      printf("Item %i failed to verify, got %i\n", i, ret);</span>
<span class="number">  46</span><span class="c">      goto Error;</span>
<span class="number">  47</span><span class="c">    }</span>
<span class="number">  48</span><span class="c">  }</span>
<span class="number">  49</span><span class="c">  if (al_feof(memfile))</span>
<span class="number">  50</span><span class="c">  {</span>
<span class="number">  51</span><span class="c">    printf("EOF indicator prematurely set!\n");</span>
<span class="number">  52</span><span class="c">    goto Error;</span>
<span class="number">  53</span><span class="c">  }</span>
<span class="number">  54</span><span class="c">  al_fseek(memfile, 0, ALLEGRO_SEEK_SET);</span>
<span class="number">  55</span><span class="c">  for (i = 0; al_fungetc(memfile, i) != EOF; ++i) { }</span>
<span class="number">  56</span><span class="c">  printf("Length of ungetc buffer: %d\n", i);</span>
<span class="number">  57</span><span class="c">  if (al_ftell(memfile) != -i)</span>
<span class="number">  58</span><span class="c">  {</span>
<span class="number">  59</span><span class="c">    printf("Current position is not correct. Expected -%d, but got %d\n", i, (int) al_ftell(memfile));</span>
<span class="number">  60</span><span class="c">    goto Error;</span>
<span class="number">  61</span><span class="c">  }</span>
<span class="number">  62</span><span class="c">  while (i--)</span>
<span class="number">  63</span><span class="c">  {</span>
<span class="number">  64</span><span class="c">    if (i != al_fgetc(memfile))</span>
<span class="number">  65</span><span class="c">    {</span>
<span class="number">  66</span><span class="c">      printf("Failed to verify ungetc data.\n");</span>
<span class="number">  67</span><span class="c">      goto Error;</span>
<span class="number">  68</span><span class="c">    }</span>
<span class="number">  69</span><span class="c">  }</span>
<span class="number">  70</span><span class="c">  if (al_ftell(memfile) != 0)</span>
<span class="number">  71</span><span class="c">  {</span>
<span class="number">  72</span><span class="c">    printf("Current position is not correct after reading back the ungetc buffer\n");</span>
<span class="number">  73</span><span class="c">    printf("Expected 0, but got %d\n", (int) al_ftell(memfile));</span>
<span class="number">  74</span><span class="c">    goto Error;</span>
<span class="number">  75</span><span class="c">  }</span>
<span class="number">  76</span><span class="c">  al_fputs(memfile, "legro rocks!");</span>
<span class="number">  77</span><span class="c">  al_fseek(memfile, 0, ALLEGRO_SEEK_SET);</span>
<span class="number">  78</span><span class="c">  al_fungetc(memfile, 'l');</span>
<span class="number">  79</span><span class="c">  al_fungetc(memfile, 'A');</span>
<span class="number">  80</span><span class="c">  al_fgets(memfile, buffer, 15);</span>
<span class="number">  81</span><span class="c">  if (strcmp(buffer, "Allegro rocks!"))</span>
<span class="number">  82</span><span class="c">  {</span>
<span class="number">  83</span><span class="c">    printf("Expected to see 'Allegro rocks!' but got '%s' instead.\n", buffer);</span>
<span class="number">  84</span><span class="c">    printf("(Maybe the ungetc buffer isn't big enough.)\n");</span>
<span class="number">  85</span><span class="c">    goto Error;</span>
<span class="number">  86</span><span class="c">  }</span>
<span class="number">  87</span><span class="c">  printf("Done.\n");</span>
<span class="number">  88</span><span class="c">  al_fclose(memfile);</span>
<span class="number">  89</span><span class="c">  free(data);</span>
<span class="number">  90</span><span class="c">  return 0;</span>
<span class="number">  91</span><span class="c">Error:</span>
<span class="number">  92</span><span class="c">  al_fclose(memfile);</span>
<span class="number">  93</span><span class="c">  free(data);</span>
<span class="number">  94</span><span class="c">  return 1;</span>
<span class="number">  95</span><span class="c">}*/</span> 
<span class="number">  96</span>
<span class="number">  97</span><span class="p">#pragma region MyRegion</span>
<span class="number">  98</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  99</span><span class="p">#include &lt;vector&gt;</span>
<span class="number"> 100</span><span class="p">#include &lt;string&gt;</span>
<span class="number"> 101</span><span class="p">#include "sqlite3.h"</span>
<span class="number"> 102</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number"> 103</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number"> 104</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number"> 105</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number"> 106</span><span class="p">#include &lt;allegro5/allegro_memfile.h&gt;</span>
<span class="number"> 107</span><span class="p">#include "allegro5/allegro_native_dialog.h"</span>
<span class="number"> 108</span><span class="p">#include &lt;fstream&gt;</span>
<span class="number"> 109</span>
<span class="number"> 110</span>
<span class="number"> 111</span>
<span class="number"> 112</span><span class="k1">static</span> <span class="k1">int</span> callback<span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span>NotUsed, <span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>azColName<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 113</span>   <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 114</span>   <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>argc<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 115</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s = %s\n"</span>, azColName<span class="k2">[</span>i<span class="k2">]</span>, argv<span class="k2">[</span>i<span class="k2">]</span> ? argv<span class="k2">[</span>i<span class="k2">]</span> <span class="k2">:</span> <span class="s">"NULL"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>   <span class="k2">}</span>
<span class="number"> 117</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 119</span><span class="k2">}</span>
<span class="number"> 120</span>
<span class="number"> 121</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span> BitmapBytes<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bmp , <span class="k1">int</span><span class="k3">*</span> size_store<span class="k2">)</span>
<span class="number"> 122</span><span class="k2">{</span>
<span class="number"> 123</span>  <span class="k1">int</span> size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">*</span><a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">*</span><span class="n">4</span><span class="k2">;</span>
<span class="number"> 124</span>  <span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span> buffer <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</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>size<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>  <span class="k1">if</span> <span class="k2">(</span>buffer<span class="k2">)</span>
<span class="number"> 126</span>  <span class="k2">{</span>
<span class="number"> 127</span>    <span class="k3">*</span>size_store <span class="k3">=</span> size<span class="k2">;</span>
<span class="number"> 128</span>  <span class="k2">}</span>
<span class="number"> 129</span>  <span class="k1">else</span>
<span class="number"> 130</span>  <span class="k2">{</span>
<span class="number"> 131</span>    <span class="k3">*</span>size_store <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 132</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 133</span>  <span class="k2">}</span>
<span class="number"> 134</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_539.html" target="_blank">lock</a> <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_RGBA_8888 , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> y <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span>
<span class="number"> 136</span>  <span class="k2">{</span>
<span class="number"> 137</span>    <span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span> dat <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>lock-&gt;data <span class="k3">+</span> <span class="n">4</span><span class="k3">*</span>y<span class="k3">*</span>lock-&gt;pitch<span class="k2">;</span>
<span class="number"> 138</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span>buffer <span class="k3">+</span> <span class="n">4</span><span class="k3">*</span>y<span class="k3">*</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span> , dat , <span class="n">4</span><span class="k3">*</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>  <span class="k2">}</span>
<span class="number"> 140</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>
<span class="number"> 141</span>  <span class="k1">return</span> buffer<span class="k2">;</span>
<span class="number"> 142</span><span class="k2">}</span>
<span class="number"> 143</span>
<span class="number"> 144</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"> 145</span>
<span class="number"> 146</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"> 147</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"> 148</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"> 149</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"> 150</span>
<span class="number"> 151</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 152</span>  event_queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>
<span class="number"> 154</span>  std::vector<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k3">&gt;</span> Bitmaps<span class="k2">;</span>
<span class="number"> 155</span>
<span class="number"> 156</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">640</span>,<span class="n">480</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"C:\\Users\\Kevin\\Desktop\\Programing\\BitmapToSqliteConverter\\Debug\\arial.ttf"</span>,<span class="n">24</span>,<span class="n">0</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span>
<span class="number"> 160</span>  <span class="c">//al_clear_to_color(al_map_rgb(50,10,70));</span>
<span class="number"> 161</span>  
<span class="number"> 162</span>
<span class="number"> 163</span>
<span class="number"> 164</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> World <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 165</span>  World <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">"C:/Users/Kevin/Desktop/Programing/BitmapToSqliteConverter/Debug/Island.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 166</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>World<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 167</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Error loading hello.bmp\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 168</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 169</span>  <span class="k2">}</span>
<span class="number"> 170</span>
<span class="number"> 171</span>  sqlite3 <span class="k3">*</span>db<span class="k2">;</span>
<span class="number"> 172</span>   <span class="k1">char</span> <span class="k3">*</span>zErrMsg <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 173</span>   <span class="k1">int</span> rc<span class="k2">;</span>
<span class="number"> 174</span>   rc <span class="k3">=</span> sqlite3_open<span class="k2">(</span><span class="s">"C:\\Users\\Kevin\\Desktop\\Programing\\mov\\movDB"</span>, <span class="k3">&amp;</span>db<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>   <span class="c">/* Open database */</span>
<span class="number"> 176</span>         <span class="k1">if</span><span class="k2">(</span> rc <span class="k2">)</span><span class="k2">{</span>
<span class="number"> 177</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Can't open database: %s\n"</span>, sqlite3_errmsg<span class="k2">(</span>db<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 178</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 179</span>         <span class="k2">}</span><span class="k1">else</span><span class="k2">{</span>
<span class="number"> 180</span>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Opened database successfully\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 181</span>         <span class="k2">}</span>
<span class="number"> 182</span>         <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> sql<span class="k2">;</span>
<span class="number"> 183</span>
<span class="number"> 184</span>  <span class="k1">char</span> fileName<span class="k2">[</span><span class="n">10</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 185</span>  <span class="k1">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 186</span>
<span class="number"> 187</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>memfile<span class="k2">;</span>
<span class="number"> 188</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>SubBmp<span class="k2">;</span>
<span class="number"> 189</span>  <span class="k1">char</span> data<span class="k2">[</span><span class="n">5</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 190</span>  <span class="k1">int</span> data_size<span class="k2">;</span>
<span class="number"> 191</span>  <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>buffer<span class="k2">;</span>
<span class="number"> 192</span>
<span class="number"> 193</span>  <span class="k1">void</span> <span class="k3">*</span>fileBuffer<span class="k2">;</span>
<span class="number"> 194</span>  <span class="k1">void</span> <span class="k3">*</span>graphicBuffer<span class="k2">;</span>
<span class="number"> 195</span>  <span class="k1">int</span> length <span class="k3">=</span> <span class="n">16</span><span class="k2">;</span>
<span class="number"> 196</span>
<span class="number"> 197</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span> y <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>World<span class="k2">)</span><span class="k2">;</span> y <span class="k3">=</span> y <span class="k3">+</span> <span class="n">16</span><span class="k2">)</span>
<span class="number"> 198</span>  <span class="k2">{</span>
<span class="number"> 199</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>World<span class="k2">)</span><span class="k2">;</span> x <span class="k3">=</span> x <span class="k3">+</span> <span class="n">16</span><span class="k2">)</span>
<span class="number"> 200</span>    <span class="k2">{</span>
<span class="number"> 201</span>      SubBmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>World, x, y, <span class="n">16</span>, <span class="n">16</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>      <span class="c">//buffer = BitmapBytes(SubBmp, &amp;length);</span>
<span class="number"> 203</span>      count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 204</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_517.html" target="_blank">itoa</a><span class="k2">(</span>count,data,<span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 205</span>      <a href="http://www.allegro.cc/manual/al_save_bitmap"><span class="a">al_save_bitmap</span></a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_752.html" target="_blank">strcat</a><span class="k2">(</span>data,<span class="s">".bmp"</span><span class="k2">)</span>,SubBmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 206</span>      
<span class="number"> 207</span>    <span class="k2">}</span>
<span class="number"> 208</span>  <span class="k2">}</span>
<span class="number"> 209</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 210</span><span class="k2">}</span>  
<span class="number"> 211</span><span class="p">#pragma endregion</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kevin NO)</author>
		<pubDate>Mon, 19 May 2014 09:10:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmmm, your coee seems to be missing the point. I have attached an example that cuts up a bitmap and saves it to files using the memfile addon. However, I think you could adapt without too much effort to saving to sqlite using the real_size and buffer.</p><p>Here is the code repeated: 
</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="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro_memfile.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">   5</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="p">#define DISPLAY_W 640</span>
<span class="number">   8</span><span class="p">#define DISPLAY_H 480</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="p">#define SKIP_W 16</span>
<span class="number">  11</span><span class="p">#define SKIP_H 16</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="k1">void</span> display_bitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> bmp, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">double</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  14</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">  15</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp, <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>x, <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  16</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">  17</span>  <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span><span class="k2">}</span>
<span class="number">  19</span>
<span class="number">  20</span><span class="k1">bool</span> save_sub_bitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> sub, 
<span class="number">  21</span>                     <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> slice_w, <span class="k1">int</span> slice_h, 
<span class="number">  22</span>                     <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> prefix<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  23</span>  <span class="k1">int</span> size<span class="k2">;</span>
<span class="number">  24</span>  <span class="k1">void</span> <span class="k3">*</span> buffer<span class="k2">;</span>
<span class="number">  25</span>  <span class="k1">int</span> real_size<span class="k2">;</span>
<span class="number">  26</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span> memfile<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>sub<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  29</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Could not create sub bitmap!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  31</span>  <span class="k2">}</span>
<span class="number">  32</span>  <span class="c">/* Allocate a buffer that should always be too big.*/</span>
<span class="number">  33</span>  size      <span class="k3">=</span> slice_w <span class="k3">*</span> slice_h <span class="k3">*</span> <span class="n">4</span> <span class="k3">*</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  34</span>  buffer    <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_81.html" target="_blank">calloc</a><span class="k2">(</span>size, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>  real_size <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  36</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>buffer<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  37</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Could not allocate buffer!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  39</span>  <span class="k2">}</span>
<span class="number">  40</span>  
<span class="number">  41</span>  <span class="c">/* Open memfile. */</span>
<span class="number">  42</span>  memfile <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>buffer, size, <span class="s">"rw"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>memfile<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  44</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to open memfile!\n"</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  45</span>  <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  46</span>    <span class="c">/* save the bitmap into the memfile. */</span>
<span class="number">  47</span>    <a href="http://www.allegro.cc/manual/al_save_bitmap_f"><span class="a">al_save_bitmap_f</span></a><span class="k2">(</span>memfile, <span class="s">".bmp"</span>, sub<span class="k2">)</span><span class="k2">;</span>
<span class="number">  48</span>    <span class="c">/* Get the real size of the bitmap. */</span>
<span class="number">  49</span>    real_size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ftell"><span class="a">al_ftell</span></a><span class="k2">(</span>memfile<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>    <span class="k1">if</span><span class="k2">(</span>real_size <span class="k3">&lt;</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  51</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Real size is too small!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  53</span>      <span class="c">/* now, buffer contains the correct bitmap data. Save that to a file</span>
<span class="number">  54</span><span class="c">       * (but if could be stored into sqlite as well, if needed). */</span>
<span class="number">  55</span>      FILE <span class="k3">*</span> output<span class="k2">;</span>
<span class="number">  56</span>      <span class="k1">char</span> filename<span class="k2">[</span><span class="n">255</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  57</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>filename, <span class="s">"%.16s_%d_%d.bmp\0"</span>, prefix, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>x <span class="k3">/</span> slice_w<span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span>, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>y<span class="k3">/</span>slice_h<span class="k2">)</span> <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>      output <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_337.html" target="_blank">fopen</a><span class="k2">(</span>filename, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>      <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>output<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  60</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Could not open output file!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>      <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  62</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_371.html" target="_blank">fwrite</a><span class="k2">(</span>buffer, size, <span class="n">1</span>, output<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_308.html" target="_blank">fclose</a><span class="k2">(</span>output<span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>      <span class="k2">}</span>
<span class="number">  65</span>   <span class="k2">}</span>
<span class="number">  66</span>   <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>memfile<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>  <span class="k2">}</span>
<span class="number">  68</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span><span class="k2">}</span>
<span class="number">  70</span>
<span class="number">  71</span>
<span class="number">  72</span><span class="k1">bool</span> split_and_save_bitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> input, <span class="k1">int</span> slice_w, <span class="k1">int</span> slice_h, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> prefix<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  73</span>  <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="number">  74</span>  <span class="k1">for</span><span class="k2">(</span>y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>input<span class="k2">)</span> <span class="k2">;</span> y <span class="k3">+</span><span class="k3">=</span> slice_h<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  75</span>    <span class="k1">for</span><span class="k2">(</span>x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>input<span class="k2">)</span>  <span class="k2">;</span> x <span class="k3">+</span><span class="k3">=</span> slice_w<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  76</span>      <span class="c">/* create the sub bitmap */</span>
<span class="number">  77</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> sub <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>input, x, y, slice_w, slice_h<span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>      <span class="c">/* display it, then save it, and then clean up. */</span>
<span class="number">  79</span>      display_bitmap<span class="k2">(</span>sub, x, y, <span class="n">0</span>.<span class="n">1</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  80</span>      save_sub_bitmap<span class="k2">(</span>sub, x, y, slice_w, slice_h, prefix<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>      <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>sub<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>    <span class="k2">}</span>
<span class="number">  83</span>  <span class="k2">}</span>
<span class="number">  84</span>
<span class="number">  85</span><span class="k2">}</span>
<span class="number">  86</span>
<span class="number">  87</span>
<span class="number">  88</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">  89</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">  90</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a>  <span class="k3">*</span> input   <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  91</span>  
<span class="number">  92</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">  93</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to initialize allegro!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  95</span>  <span class="k2">}</span>
<span class="number">  96</span>  
<span class="number">  97</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</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="k2">{</span>
<span class="number">  98</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to initialize image addon!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>    <span class="k1">return</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 100</span>  <span class="k2">}</span>
<span class="number"> 101</span>  
<span class="number"> 102</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>DISPLAY_W, DISPLAY_H<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</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"> 104</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to create display!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>    <span class="k1">return</span> <span class="n">3</span><span class="k2">;</span>
<span class="number"> 106</span>  <span class="k2">}</span>
<span class="number"> 107</span>  
<span class="number"> 108</span>  input <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">"input.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>input<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 110</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Failed to load input!\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 111</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"> 112</span>    <span class="k1">return</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 113</span>  <span class="k2">}</span>
<span class="number"> 114</span>  <span class="c">/* Display loaded bitmap */</span>
<span class="number"> 115</span>  display_bitmap<span class="k2">(</span>input, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>  <span class="c">/* Now split and save it. */</span>
<span class="number"> 117</span>  split_and_save_bitmap<span class="k2">(</span>input, SKIP_W, SKIP_H, <span class="s">"output"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>
<span class="number"> 119</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"> 120</span><span class="k2">}</span>
</div></div><p>

Oh and here is an example of how to save a binary blob, which would be a bitmap file in your case, using sqlite3 <a href="http://www.sqlite.org/cvstrac/wiki?p=BlobExample">http://www.sqlite.org/cvstrac/wiki?p=BlobExample</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Mon, 19 May 2014 16:20:26 +0000</pubDate>
	</item>
</rss>
