<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>help writing to locked bitmap</title>
		<link>http://www.allegro.cc/forums/view/613082</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 06 Aug 2013 21:26:55 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Hi guys,</p><p> I&#39;ve written some code to merge two black and white bitmaps. The code crashes when<br />writing to the output bitmap.</p><p> I&#39;ve done some detective work but not found out what&#39;s wrong. The bad code is somewhere near the end this 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="k1">int</span> merge_black_and_white<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_CONFIG"><span class="a">ALLEGRO_CONFIG</span></a> <span class="k3">*</span>cfg<span class="k2">)</span>
<span class="number">   2</span><span class="k2">{</span>
<span class="number">   3</span>  <span class="k1">unsigned</span> <span class="k1">char</span> mr, mg, mb<span class="k2">;</span> <span class="c">/*                 */</span>
<span class="number">   4</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bw1<span class="k2">;</span>
<span class="number">   5</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bw2<span class="k2">;</span>
<span class="number">   6</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>bw1_name<span class="k2">;</span>
<span class="number">   7</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>bw2_name<span class="k2">;</span>
<span class="number">   8</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>config_string<span class="k2">;</span>
<span class="number">   9</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lock1<span class="k2">;</span>
<span class="number">  10</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lock2<span class="k2">;</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>lock3<span class="k2">;</span>
<span class="number">  12</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>output<span class="k2">;</span>
<span class="number">  13</span>  <span class="k1">int</span> blend_type<span class="k2">;</span>
<span class="number">  14</span>  <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="number">  15</span>  <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>ptr1, <span class="k3">*</span>ptr2, <span class="k3">*</span>ptr3<span class="k2">;</span>
<span class="number">  16</span>  <span class="k1">int</span> r1, g1, b1, r2, g2, b2, a1, a2<span class="k2">;</span>
<span class="number">  17</span>  <span class="k1">unsigned</span> <span class="k1">char</span> new_r, new_g, new_b<span class="k2">;</span>
<span class="number">  18</span>  <span class="k1">unsigned</span> <span class="k1">char</span> new_gray<span class="k2">;</span>
<span class="number">  19</span>  
<span class="number">  20</span>  <span class="k1">uint32_t</span> new_colour<span class="k2">;</span>
<span class="number">  21</span>  
<span class="number">  22</span>  
<span class="number">  23</span>  <span class="c">/***** Load the first black and white bitmap. *****************************************/</span>
<span class="number">  24</span>  
<span class="number">  25</span>  bw1_name <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_config_value"><span class="a">al_get_config_value</span></a><span class="k2">(</span> cfg, NULL, <span class="s">"bw_picture1"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>    <span class="k1">if</span><span class="k2">(</span>bw1_name <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  27</span>    <span class="k2">{</span>
<span class="number">  28</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"No value for \"bw_picture1\" in config file.\n"</span><span class="k2">;</span>
<span class="number">  29</span>     eek<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>    <span class="k2">}</span>
<span class="number">  31</span>    <span class="k1">else</span>
<span class="number">  32</span>    <span class="k2">{</span>
<span class="number">  33</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Name of bitmap 1 is "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw1_name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>   
<span class="number">  34</span>    <span class="k2">}</span>
<span class="number">  35</span>    
<span class="number">  36</span>    
<span class="number">  37</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Attempting to load "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw1_name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>
<span class="number">  38</span>  
<span class="number">  39</span>  bw1 <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>bw1_name<span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>   
<span class="number">  41</span>    <span class="k1">if</span><span class="k2">(</span>bw1 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  42</span>    <span class="k2">{</span>
<span class="number">  43</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loading failed.\n"</span><span class="k2">;</span> 
<span class="number">  44</span>    eek<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  45</span>    <span class="k2">}</span>
<span class="number">  46</span>    <span class="k1">else</span>
<span class="number">  47</span>    <span class="k2">{</span>
<span class="number">  48</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loaded it.\n"</span><span class="k2">;</span>  
<span class="number">  49</span>    <span class="k2">}</span> 
<span class="number">  50</span>  
<span class="number">  51</span>  <span class="c">/***** Load the second black and white bitmap. ****************************************/</span>
<span class="number">  52</span>  
<span class="number">  53</span>    
<span class="number">  54</span>    bw2_name <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_config_value"><span class="a">al_get_config_value</span></a><span class="k2">(</span> cfg, NULL, <span class="s">"bw_picture2"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>    <span class="k1">if</span><span class="k2">(</span> bw2_name  <span class="k3">=</span><span class="k3">=</span> NULL <span class="k2">)</span>
<span class="number">  56</span>    <span class="k2">{</span>
<span class="number">  57</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"No value for \"bw_picture2\" in config file.\n"</span><span class="k2">;</span>
<span class="number">  58</span>     eek<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>    <span class="k2">}</span>
<span class="number">  60</span>    <span class="k1">else</span>
<span class="number">  61</span>    <span class="k2">{</span>
<span class="number">  62</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Name of bitmap 2 is "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw2_name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>   
<span class="number">  63</span>    <span class="k2">}</span>
<span class="number">  64</span>    
<span class="number">  65</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Attempting to load "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw2_name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>
<span class="number">  66</span>   
<span class="number">  67</span>    bw2 <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> bw2_name <span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>   
<span class="number">  69</span>    <span class="k1">if</span><span class="k2">(</span>bw2 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  70</span>    <span class="k2">{</span>
<span class="number">  71</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loading failed.\n"</span><span class="k2">;</span> 
<span class="number">  72</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  73</span>    <span class="k2">}</span>
<span class="number">  74</span>    <span class="k1">else</span>
<span class="number">  75</span>    <span class="k2">{</span>
<span class="number">  76</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loaded it.\n"</span><span class="k2">;</span>  
<span class="number">  77</span>    <span class="k2">}</span> 
<span class="number">  78</span>    
<span class="number">  79</span>    <span class="c">/*********************************************************************************************/</span>
<span class="number">  80</span>  
<span class="number">  81</span>  
<span class="number">  82</span>  
<span class="number">  83</span>  <span class="k1">int</span> bw <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> bw1 <span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>  <span class="k1">int</span> bh <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> bw1 <span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>  
<span class="number">  86</span>  <span class="k1">if</span><span class="k2">(</span> bw <span class="k3">!</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>bw2<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> bh <span class="k3">!</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>bw2<span class="k2">)</span> <span class="k2">)</span>
<span class="number">  87</span>  <span class="k2">{</span>
<span class="number">  88</span>     
<span class="number">  89</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Bitmaps are not the same dimensions.\n"</span><span class="k2">;</span>
<span class="number">  90</span>    
<span class="number">  91</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number">  92</span>    <span class="k2">}</span>
<span class="number">  93</span>    <span class="k1">else</span>
<span class="number">  94</span>    <span class="k2">{</span>
<span class="number">  95</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"bw1 : "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" * "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bh <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n bw2 : "</span> <span class="k3">&lt;</span><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>bw2<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" * "</span> <span class="k3">&lt;</span><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>bw2<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>  
<span class="number">  96</span>  <span class="k2">}</span>
<span class="number">  97</span>  
<span class="number">  98</span>  
<span class="number">  99</span>  output <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span> bw, bh <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>  
<span class="number"> 101</span>  <span class="k1">if</span><span class="k2">(</span>output <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 102</span>  <span class="k2">{</span>
<span class="number"> 103</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"couldn't create the output bitmap.\n"</span><span class="k2">;</span>
<span class="number"> 104</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number"> 105</span>    <span class="k2">}</span>
<span class="number"> 106</span>  
<span class="number"> 107</span>  
<span class="number"> 108</span>  lock1 <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> bw1, ALLEGRO_PIXEL_FORMAT_RGBA_8888,  ALLEGRO_LOCK_READONLY <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>  
<span class="number"> 110</span>  <span class="k1">if</span><span class="k2">(</span>lock1 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 111</span>  <span class="k2">{</span>
<span class="number"> 112</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't lock bitmap 1.\n"</span><span class="k2">;</span>
<span class="number"> 113</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 114</span>    <span class="k2">}</span>
<span class="number"> 115</span>  
<span class="number"> 116</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" locked bitmap 1.\n\n"</span><span class="k2">;</span>
<span class="number"> 117</span>  
<span class="number"> 118</span>  lock2 <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> bw2, ALLEGRO_PIXEL_FORMAT_RGBA_8888, ALLEGRO_LOCK_READONLY <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 119</span>  
<span class="number"> 120</span>  <span class="k1">if</span><span class="k2">(</span>lock2 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 121</span>  <span class="k2">{</span>
<span class="number"> 122</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't lock bitmap 1.\n"</span><span class="k2">;</span>
<span class="number"> 123</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 124</span>  <span class="k2">}</span>
<span class="number"> 125</span>  
<span class="number"> 126</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" locked bitmap 2.\n\n"</span><span class="k2">;</span>
<span class="number"> 127</span>  
<span class="number"> 128</span>  
<span class="number"> 129</span>  
<span class="number"> 130</span>  output <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span> bw, bh <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>  <span class="k1">if</span><span class="k2">(</span>output <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 132</span>  <span class="k2">{</span>
<span class="number"> 133</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't create the new bitmap.\n"</span><span class="k2">;</span>
<span class="number"> 134</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number"> 135</span>    <span class="k2">}</span>
<span class="number"> 136</span>  
<span class="number"> 137</span>  
<span class="number"> 138</span>  
<span class="number"> 139</span>  
<span class="number"> 140</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Getting blend type.\n"</span><span class="k2">;</span>
<span class="number"> 141</span>  
<span class="number"> 142</span>  <span class="c">/* Using bw1_name out of context here instead of using another variable. */</span>
<span class="number"> 143</span>  
<span class="number"> 144</span>  bw1_name <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_config_value"><span class="a">al_get_config_value</span></a><span class="k2">(</span> cfg, NULL, <span class="s">"black_and_white_merge_blend_type"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 145</span>  
<span class="number"> 146</span>  
<span class="number"> 147</span>  <span class="k1">if</span><span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span> bw1_name, <span class="s">"average"</span> <span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 148</span>  <span class="k2">{</span>
<span class="number"> 149</span>    blend_type <span class="k3">=</span> BLEND_MODE_AVERAGE<span class="k2">;</span>  
<span class="number"> 150</span>  <span class="k2">}</span>
<span class="number"> 151</span>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span> bw1_name, <span class="s">"darkest"</span> <span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 152</span>  <span class="k2">{</span>
<span class="number"> 153</span>    blend_type <span class="k3">=</span> BLEND_MODE_DARKEST<span class="k2">;</span>
<span class="number"> 154</span>  <span class="k2">}</span>
<span class="number"> 155</span>  <span class="k1">else</span>
<span class="number"> 156</span>  <span class="k2">{</span>
<span class="number"> 157</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"No blend mode specified in configuration file.\n\n"</span><span class="k2">;</span>
<span class="number"> 158</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number"> 159</span>  <span class="k2">}</span>
<span class="number"> 160</span>  
<span class="number"> 161</span>  
<span class="number"> 162</span>  lock3 <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> output, ALLEGRO_PIXEL_FORMAT_RGBA_8888,  ALLEGRO_LOCK_WRITEONLY <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 163</span>  <span class="k1">if</span><span class="k2">(</span>lock3 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 164</span>  <span class="k2">{</span>
<span class="number"> 165</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't lock output bitmap.\n\n"</span><span class="k2">;</span>
<span class="number"> 166</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number"> 167</span>  <span class="k2">}</span>
<span class="number"> 168</span>    
<span class="number"> 169</span>    <span class="c">/***************************************************************************************************/</span>
<span class="number"> 170</span>    <span class="c">/****************** Get the colour which is the mask colour. ***************************************/</span>
<span class="number"> 171</span>    <span class="c">/***************************************************************************************************/</span>
<span class="number"> 172</span>    
<span class="number"> 173</span>    
<span class="number"> 174</span>    <span class="k1">if</span><span class="k2">(</span> get_mask_colour<span class="k2">(</span>cfg, <span class="k3">&amp;</span>mr, <span class="k3">&amp;</span>mg, <span class="k3">&amp;</span>mb<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 175</span>  <span class="k2">{</span>
<span class="number"> 176</span>       cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't get mask colour from configuration file.\n\n"</span><span class="k2">;</span>
<span class="number"> 177</span>       <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 178</span>  <span class="k2">}</span>
<span class="number"> 179</span>  
<span class="number"> 180</span>  <span class="c">/***************************************************************************************************/</span>
<span class="number"> 181</span>  
<span class="number"> 182</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"processing bitmaps.\n\n"</span><span class="k2">;</span>
<span class="number"> 183</span>  
<span class="number"> 184</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> bh<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y <span class="k2">)</span>
<span class="number"> 185</span>  <span class="k2">{</span>
<span class="number"> 186</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> bw<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x <span class="k2">)</span>
<span class="number"> 187</span>     <span class="k2">{</span>  
<span class="number"> 188</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"y = "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> y <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"x = "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> x <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>
<span class="number"> 189</span>      ptr1 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock1<span class="k2">)</span> <span class="k3">+</span> lock1-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 190</span>      ptr2 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock2<span class="k2">)</span> <span class="k3">+</span> lock2-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 191</span>      
<span class="number"> 192</span>      ptr3 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock3<span class="k2">)</span> <span class="k3">+</span> lock3-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 193</span>      
<span class="number"> 194</span>      <span class="c">//cout &lt;&lt; "got pointers.\n\n";</span>
<span class="number"> 195</span>      
<span class="number"> 196</span>      r1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>      g1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 198</span>      b1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>        a1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>        
<span class="number"> 201</span>        r2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>        g2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 203</span>        b2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 204</span>        a2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 205</span>        
<span class="number"> 206</span>        <span class="c">/*</span>
<span class="number"> 207</span><span class="c">        if(a1 != 255 || a2 != 255)</span>
<span class="number"> 208</span><span class="c">        {</span>
<span class="number"> 209</span><span class="c">       cout &lt;&lt; "Alpha of at least one pixel on bitmap is not 255. Aborting in case this matters.\n\n";</span>
<span class="number"> 210</span><span class="c">       cout &lt;&lt; "x = " &lt;&lt; x &lt;&lt; "y = " &lt;&lt; y &lt;&lt; " a1 = " &lt;&lt; a1 &lt;&lt; " a2 = " &lt;&lt; a2 &lt;&lt; "\n\n";</span>
<span class="number"> 211</span><span class="c">       return 1;  </span>
<span class="number"> 212</span><span class="c">      }</span>
<span class="number"> 213</span><span class="c">        else </span>
<span class="number"> 214</span><span class="c">        * </span>
<span class="number"> 215</span><span class="c">        */</span>
<span class="number"> 216</span>        <span class="c">/*</span>
<span class="number"> 217</span><span class="c">        if( (r1 != g1 || g1 != b1 || r1 != b1) )</span>
<span class="number"> 218</span><span class="c">        {</span>
<span class="number"> 219</span><span class="c">       cout &lt;&lt; "A pixel on bitmap 1 is not grey.\n\n";  </span>
<span class="number"> 220</span><span class="c">       return 1;</span>
<span class="number"> 221</span><span class="c">      }</span>
<span class="number"> 222</span><span class="c">      else if( (r2 != g2 || g2 != b2 || r2 != b2) )</span>
<span class="number"> 223</span><span class="c">        {</span>
<span class="number"> 224</span><span class="c">       cout &lt;&lt; "A pixel on bitmap 2 is not grey.\n\n";  </span>
<span class="number"> 225</span><span class="c">       return 1;</span>
<span class="number"> 226</span><span class="c">      }</span>
<span class="number"> 227</span><span class="c">      */</span>
<span class="number"> 228</span>      
<span class="number"> 229</span>      <span class="k1">switch</span><span class="k2">(</span>blend_type<span class="k2">)</span>
<span class="number"> 230</span>      <span class="k2">{</span>
<span class="number"> 231</span>         <span class="k1">case</span> BLEND_MODE_AVERAGE:
<span class="number"> 232</span>         
<span class="number"> 233</span>            new_gray <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span> <span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> r1 <span class="k3">+</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> r2<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 234</span>        
<span class="number"> 235</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 236</span>         <span class="k1">case</span> BLEND_MODE_DARKEST:
<span class="number"> 237</span>            
<span class="number"> 238</span>            new_gray <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span> <span class="k2">(</span>r1 <span class="k3">&gt;</span> r2<span class="k2">)</span> ?  r1 <span class="k2">:</span> r2<span class="k2">;</span>
<span class="number"> 239</span>           
<span class="number"> 240</span>              <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 241</span>        <span class="k2">}</span>
<span class="number"> 242</span>        
<span class="number"> 243</span>        new_colour <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">24</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">|</span> <span class="n">255</span><span class="k2">;</span>
<span class="number"> 244</span>        
<span class="number"> 245</span>        
<span class="number"> 246</span>        <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>r1 <span class="k3">=</span><span class="k3">=</span> mr <span class="k3">&amp;</span><span class="k3">&amp;</span> g1 <span class="k3">=</span><span class="k3">=</span> mg <span class="k3">&amp;</span><span class="k3">&amp;</span> b1 <span class="k3">=</span><span class="k3">=</span> mb<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>r2 <span class="k3">=</span><span class="k3">=</span> mr <span class="k3">&amp;</span><span class="k3">&amp;</span> g2 <span class="k3">=</span><span class="k3">=</span> mg <span class="k3">&amp;</span><span class="k3">&amp;</span> b2 <span class="k3">=</span><span class="k3">=</span> mb<span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 247</span>        <span class="k2">{</span>
<span class="number"> 248</span>       <span class="c">/* Put */</span>
<span class="number"> 249</span>        
<span class="number"> 250</span>        cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"white.\n"</span><span class="k2">;</span>
<span class="number"> 251</span>       <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xffffffff</span><span class="k2">;</span>
<span class="number"> 252</span>        <span class="k2">}</span>
<span class="number"> 253</span>        <span class="k1">else</span>
<span class="number"> 254</span>        <span class="k2">{</span>
<span class="number"> 255</span>       cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"grey.\n"</span><span class="k2">;</span>
<span class="number"> 256</span>           <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k2">)</span> <span class="k3">=</span> new_colour<span class="k2">;</span>
<span class="number"> 257</span>        <span class="k2">}</span>
<span class="number"> 258</span>     <span class="k2">}</span>
<span class="number"> 259</span>  <span class="k2">}</span>
<span class="number"> 260</span>  
<span class="number"> 261</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"unlocking bitmaps.\n"</span><span class="k2">;</span>
<span class="number"> 262</span>  
<span class="number"> 263</span>  
<span class="number"> 264</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> bw1 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 265</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> bw2 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 266</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> output <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 267</span>  
<span class="number"> 268</span>  
<span class="number"> 269</span>  
<span class="number"> 270</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">"output.png"</span>, output<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 271</span>  
<span class="number"> 272</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 06 Aug 2013 14:23:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I just skimmed over, but two things caught my eye:</p><p><span class="source-code">lock3 <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> output, ALLEGRO_PIXEL_FORMAT_RGBA_8888,  ALLEGRO_LOCK_WRITEONLY <span class="k2">)</span><span class="k2">;</span></span></p><p>if you are reading and writing to the bitmap, shouldn&#39;t you use ALLEGRO_LOCK_READWRITE? Not sure if that&#39;s causing the crash.</p><p>Also, this at the end:</p><div class="source-code snippet"><div class="inner"><pre><span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xffffffff</span><span class="k2">;</span>
</pre></div></div><p>

It seems like you&#39;re setting the alpha to the combined value of the colour. It should be more like:</p><div class="source-code snippet"><div class="inner"><pre><span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xff</span><span class="k2">;</span> <span class="c">//a</span>
<span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k3">+</span><span class="n">1</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0xff</span><span class="k2">;</span> <span class="c">//b</span>
<span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k3">+</span><span class="n">2</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0xff</span><span class="k2">;</span> <span class="c">//g</span>
<span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k3">+</span><span class="n">3</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0xff</span><span class="k2">;</span> <span class="c">//r</span>
</pre></div></div><p>

What I think is happening is that the value you set for the pixel is out of range, causing the crash.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ph03nix)</author>
		<pubDate>Tue, 06 Aug 2013 16:42:34 +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/613082/988457#target">ph03nix</a> said:</div><div class="quote"><p>
Also, this at the end:</p><p>*((uint32_t *) ptr3) = 0xffffffff;
</p></div></div><p>

It&#39;s perfectly ok to do that. That would set the pixel to white.</p><p>I&#39;m not sure what the problem is William, did you try running it through a debugger?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 06 Aug 2013 16:54:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Doesn&#39;t that set the value of the array at position ptr3 to 0xffffffff (4294967295)? Let&#39;s say I actually wanted to set unsigned char at that position to that value, that&#39;s how I would do it, right? (although it would become 0 or something)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ph03nix)</author>
		<pubDate>Tue, 06 Aug 2013 16:57:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah that&#39;s what it does. </p><p>This:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>ptr<span class="k2">;</span>
<span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span>ptr<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xaabbccdd</span><span class="k2">;</span>
</pre></div></div><p>

Is identical to this:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>ptr<span class="k2">;</span>
<span class="k3">*</span><span class="k2">(</span>ptr<span class="k3">+</span><span class="n">0</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0xdd</span><span class="k2">;</span>
<span class="k3">*</span><span class="k2">(</span>ptr<span class="k3">+</span><span class="n">1</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0xcc</span><span class="k2">;</span>
<span class="k3">*</span><span class="k2">(</span>ptr<span class="k3">+</span><span class="n">2</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0xbb</span><span class="k2">;</span>
<span class="k3">*</span><span class="k2">(</span>ptr<span class="k3">+</span><span class="n">3</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0xaa</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 06 Aug 2013 17:01:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I wrote this test code:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span> test <span class="k3">=</span> <span class="k1">new</span> <span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span>
test<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
test<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
test<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
test<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k3">*</span><span class="k2">)</span>test<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xffffffff</span><span class="k2">;</span>
std::cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>test<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">", "</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>test<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">", "</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>test<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">", "</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>test<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k3">&lt;</span><span class="k3">&lt;</span>std::endl<span class="k2">;</span>
<span class="k1">delete</span> <span class="k2">[</span><span class="k2">]</span>test<span class="k2">;</span>
</pre></div></div><p>

and the output was <span class="source-code"><span class="n">255</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ph03nix)</author>
		<pubDate>Tue, 06 Aug 2013 17:07:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s because you casted to unsigned char instead of uint32_t.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 06 Aug 2013 17:10:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, I see now... <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ph03nix)</author>
		<pubDate>Tue, 06 Aug 2013 17:12:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Program received signal SIGSEGV, Segmentation fault.<br />0x004024fd in _fu63___ZSt4cout ()<br />(gdb)</p><p>I&#39;ve rewritten the code a bit :</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> merge_black_and_white<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_CONFIG"><span class="a">ALLEGRO_CONFIG</span></a> <span class="k3">*</span>cfg<span class="k2">)</span>
<span class="number">   2</span><span class="k2">{</span>
<span class="number">   3</span>  <span class="k1">unsigned</span> <span class="k1">char</span> mr, mg, mb<span class="k2">;</span> <span class="c">/*                 */</span>
<span class="number">   4</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bw1<span class="k2">;</span>
<span class="number">   5</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bw2<span class="k2">;</span>
<span class="number">   6</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>bw1_name<span class="k2">;</span>
<span class="number">   7</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>bw2_name<span class="k2">;</span>
<span class="number">   8</span>  <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>config_string<span class="k2">;</span>
<span class="number">   9</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lock1<span class="k2">;</span>
<span class="number">  10</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lock2<span class="k2">;</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>lock3<span class="k2">;</span>
<span class="number">  12</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>output<span class="k2">;</span>
<span class="number">  13</span>  <span class="k1">int</span> blend_type<span class="k2">;</span>
<span class="number">  14</span>  <span class="k1">int</span> x, y<span class="k2">;</span>
<span class="number">  15</span>  <span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span>ptr1, <span class="k3">*</span>ptr2, <span class="k3">*</span>ptr3<span class="k2">;</span>
<span class="number">  16</span>  <span class="k1">int</span> r1, g1, b1, r2, g2, b2, a1, a2<span class="k2">;</span>
<span class="number">  17</span>  <span class="k1">unsigned</span> <span class="k1">char</span> new_r, new_g, new_b<span class="k2">;</span>
<span class="number">  18</span>  <span class="k1">unsigned</span> <span class="k1">char</span> new_gray<span class="k2">;</span>
<span class="number">  19</span>  
<span class="number">  20</span>  <span class="k1">uint32_t</span> new_colour<span class="k2">;</span>
<span class="number">  21</span>  
<span class="number">  22</span>  
<span class="number">  23</span>  <span class="c">/***** Load the first black and white bitmap. *****************************************/</span>
<span class="number">  24</span>  
<span class="number">  25</span>  bw1_name <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_config_value"><span class="a">al_get_config_value</span></a><span class="k2">(</span> cfg, NULL, <span class="s">"bw_picture1"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>    <span class="k1">if</span><span class="k2">(</span>bw1_name <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  27</span>    <span class="k2">{</span>
<span class="number">  28</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"No value for \"bw_picture1\" in config file.\n"</span><span class="k2">;</span>
<span class="number">  29</span>     eek<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>    <span class="k2">}</span>
<span class="number">  31</span>    <span class="k1">else</span>
<span class="number">  32</span>    <span class="k2">{</span>
<span class="number">  33</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Name of bitmap 1 is "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw1_name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>   
<span class="number">  34</span>    <span class="k2">}</span>
<span class="number">  35</span>    
<span class="number">  36</span>    
<span class="number">  37</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Attempting to load "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw1_name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>
<span class="number">  38</span>  
<span class="number">  39</span>  bw1 <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>bw1_name<span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>   
<span class="number">  41</span>    <span class="k1">if</span><span class="k2">(</span>bw1 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  42</span>    <span class="k2">{</span>
<span class="number">  43</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loading failed.\n"</span><span class="k2">;</span> 
<span class="number">  44</span>    eek<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  45</span>    <span class="k2">}</span>
<span class="number">  46</span>    <span class="k1">else</span>
<span class="number">  47</span>    <span class="k2">{</span>
<span class="number">  48</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loaded it.\n"</span><span class="k2">;</span>  
<span class="number">  49</span>    <span class="k2">}</span> 
<span class="number">  50</span>  
<span class="number">  51</span>  <span class="c">/***** Load the second black and white bitmap. ****************************************/</span>
<span class="number">  52</span>  
<span class="number">  53</span>    
<span class="number">  54</span>    bw2_name <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_config_value"><span class="a">al_get_config_value</span></a><span class="k2">(</span> cfg, NULL, <span class="s">"bw_picture2"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>    <span class="k1">if</span><span class="k2">(</span> bw2_name  <span class="k3">=</span><span class="k3">=</span> NULL <span class="k2">)</span>
<span class="number">  56</span>    <span class="k2">{</span>
<span class="number">  57</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"No value for \"bw_picture2\" in config file.\n"</span><span class="k2">;</span>
<span class="number">  58</span>     eek<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>    <span class="k2">}</span>
<span class="number">  60</span>    <span class="k1">else</span>
<span class="number">  61</span>    <span class="k2">{</span>
<span class="number">  62</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Name of bitmap 2 is "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw2_name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>   
<span class="number">  63</span>    <span class="k2">}</span>
<span class="number">  64</span>    
<span class="number">  65</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Attempting to load "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw2_name <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>
<span class="number">  66</span>   
<span class="number">  67</span>    bw2 <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> bw2_name <span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>   
<span class="number">  69</span>    <span class="k1">if</span><span class="k2">(</span>bw2 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  70</span>    <span class="k2">{</span>
<span class="number">  71</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loading failed.\n"</span><span class="k2">;</span> 
<span class="number">  72</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  73</span>    <span class="k2">}</span>
<span class="number">  74</span>    <span class="k1">else</span>
<span class="number">  75</span>    <span class="k2">{</span>
<span class="number">  76</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Loaded it.\n"</span><span class="k2">;</span>  
<span class="number">  77</span>    <span class="k2">}</span> 
<span class="number">  78</span>    
<span class="number">  79</span>    <span class="c">/*********************************************************************************************/</span>
<span class="number">  80</span>  
<span class="number">  81</span>  
<span class="number">  82</span>  
<span class="number">  83</span>  <span class="k1">int</span> bw <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> bw1 <span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>  <span class="k1">int</span> bh <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> bw1 <span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>  
<span class="number">  86</span>  <span class="k1">if</span><span class="k2">(</span> bw <span class="k3">!</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>bw2<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> bh <span class="k3">!</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>bw2<span class="k2">)</span> <span class="k2">)</span>
<span class="number">  87</span>  <span class="k2">{</span>
<span class="number">  88</span>     
<span class="number">  89</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Bitmaps are not the same dimensions.\n"</span><span class="k2">;</span>
<span class="number">  90</span>    
<span class="number">  91</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number">  92</span>    <span class="k2">}</span>
<span class="number">  93</span>    <span class="k1">else</span>
<span class="number">  94</span>    <span class="k2">{</span>
<span class="number">  95</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"bw1 : "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bw <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" * "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> bh <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n bw2 : "</span> <span class="k3">&lt;</span><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>bw2<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" * "</span> <span class="k3">&lt;</span><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>bw2<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>  
<span class="number">  96</span>  <span class="k2">}</span>
<span class="number">  97</span>  
<span class="number">  98</span>  
<span class="number">  99</span>  
<span class="number"> 100</span>  
<span class="number"> 101</span>  
<span class="number"> 102</span>  lock1 <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> bw1, ALLEGRO_PIXEL_FORMAT_RGBA_8888,  ALLEGRO_LOCK_READONLY <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>  
<span class="number"> 104</span>  <span class="k1">if</span><span class="k2">(</span>lock1 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 105</span>  <span class="k2">{</span>
<span class="number"> 106</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't lock bitmap 1.\n"</span><span class="k2">;</span>
<span class="number"> 107</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 108</span>    <span class="k2">}</span>
<span class="number"> 109</span>  
<span class="number"> 110</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" locked bitmap 1.\n\n"</span><span class="k2">;</span>
<span class="number"> 111</span>  
<span class="number"> 112</span>  lock2 <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> bw2, ALLEGRO_PIXEL_FORMAT_RGBA_8888, ALLEGRO_LOCK_READONLY <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>  
<span class="number"> 114</span>  <span class="k1">if</span><span class="k2">(</span>lock2 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 115</span>  <span class="k2">{</span>
<span class="number"> 116</span>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't lock bitmap 1.\n"</span><span class="k2">;</span>
<span class="number"> 117</span>    <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 118</span>  <span class="k2">}</span>
<span class="number"> 119</span>  
<span class="number"> 120</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" locked bitmap 2.\n\n"</span><span class="k2">;</span>
<span class="number"> 121</span>  
<span class="number"> 122</span>  
<span class="number"> 123</span>  
<span class="number"> 124</span>  
<span class="number"> 125</span>  output <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span> bw, bh <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>  <span class="k1">if</span><span class="k2">(</span>output <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 127</span>  <span class="k2">{</span>
<span class="number"> 128</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't create the new bitmap.\n"</span><span class="k2">;</span>
<span class="number"> 129</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number"> 130</span>    <span class="k2">}</span>
<span class="number"> 131</span>  
<span class="number"> 132</span>  
<span class="number"> 133</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"output bitmap : "</span> <span class="k3">&lt;</span><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>output<span class="k2">)</span>  <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" * "</span> <span class="k3">&lt;</span><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>output<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>
<span class="number"> 134</span>  
<span class="number"> 135</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Getting blend type.\n"</span><span class="k2">;</span>
<span class="number"> 136</span>  
<span class="number"> 137</span>  <span class="c">/* Using bw1_name out of context here instead of using another variable. */</span>
<span class="number"> 138</span>  
<span class="number"> 139</span>  bw1_name <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_config_value"><span class="a">al_get_config_value</span></a><span class="k2">(</span> cfg, NULL, <span class="s">"black_and_white_merge_blend_type"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>  
<span class="number"> 141</span>  
<span class="number"> 142</span>  <span class="k1">if</span><span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span> bw1_name, <span class="s">"average"</span> <span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 143</span>  <span class="k2">{</span>
<span class="number"> 144</span>    blend_type <span class="k3">=</span> BLEND_MODE_AVERAGE<span class="k2">;</span>  
<span class="number"> 145</span>  <span class="k2">}</span>
<span class="number"> 146</span>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_754.html" target="_blank">strcmp</a><span class="k2">(</span> bw1_name, <span class="s">"darkest"</span> <span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 147</span>  <span class="k2">{</span>
<span class="number"> 148</span>    blend_type <span class="k3">=</span> BLEND_MODE_DARKEST<span class="k2">;</span>
<span class="number"> 149</span>  <span class="k2">}</span>
<span class="number"> 150</span>  <span class="k1">else</span>
<span class="number"> 151</span>  <span class="k2">{</span>
<span class="number"> 152</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"No blend mode specified in configuration file.\n\n"</span><span class="k2">;</span>
<span class="number"> 153</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number"> 154</span>  <span class="k2">}</span>
<span class="number"> 155</span>  
<span class="number"> 156</span>  
<span class="number"> 157</span>  lock3 <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> output, ALLEGRO_PIXEL_FORMAT_RGBA_8888,  ALLEGRO_LOCK_READWRITE <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 158</span>  <span class="k1">if</span><span class="k2">(</span>lock3 <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 159</span>  <span class="k2">{</span>
<span class="number"> 160</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't lock output bitmap.\n\n"</span><span class="k2">;</span>
<span class="number"> 161</span>     <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number"> 162</span>  <span class="k2">}</span>
<span class="number"> 163</span>    
<span class="number"> 164</span>    <span class="c">/***************************************************************************************************/</span>
<span class="number"> 165</span>    <span class="c">/****************** Get the colour which is the mask colour. ***************************************/</span>
<span class="number"> 166</span>    <span class="c">/***************************************************************************************************/</span>
<span class="number"> 167</span>    
<span class="number"> 168</span>    
<span class="number"> 169</span>    <span class="k1">if</span><span class="k2">(</span> get_mask_colour<span class="k2">(</span>cfg, <span class="k3">&amp;</span>mr, <span class="k3">&amp;</span>mg, <span class="k3">&amp;</span>mb<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 170</span>  <span class="k2">{</span>
<span class="number"> 171</span>       cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't get mask colour from configuration file.\n\n"</span><span class="k2">;</span>
<span class="number"> 172</span>       <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 173</span>  <span class="k2">}</span>
<span class="number"> 174</span>  
<span class="number"> 175</span>  <span class="c">/***************************************************************************************************/</span>
<span class="number"> 176</span>  
<span class="number"> 177</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"processing bitmaps.\n\n"</span><span class="k2">;</span>
<span class="number"> 178</span>  
<span class="number"> 179</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> bh<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y <span class="k2">)</span>
<span class="number"> 180</span>  <span class="k2">{</span>
<span class="number"> 181</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> bw<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x <span class="k2">)</span>
<span class="number"> 182</span>     <span class="k2">{</span>  
<span class="number"> 183</span>      <span class="c">//cout &lt;&lt; "y = " &lt;&lt; y &lt;&lt; "x = " &lt;&lt; x &lt;&lt; "\n\n";</span>
<span class="number"> 184</span>      ptr1 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock1<span class="k2">)</span> <span class="k3">+</span> lock1-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 185</span>      ptr2 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock2<span class="k2">)</span> <span class="k3">+</span> lock2-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 186</span>      
<span class="number"> 187</span>      ptr3 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock3<span class="k2">)</span> <span class="k3">+</span> lock3-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 188</span>      
<span class="number"> 189</span>      <span class="c">//cout &lt;&lt; "got pointers.\n\n";</span>
<span class="number"> 190</span>      
<span class="number"> 191</span>      r1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>      g1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 193</span>      b1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>        a1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>        
<span class="number"> 196</span>        r2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span>        g2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 198</span>        b2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>        a2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 200</span>        
<span class="number"> 201</span>        <span class="c">/*</span>
<span class="number"> 202</span><span class="c">        if(a1 != 255 || a2 != 255)</span>
<span class="number"> 203</span><span class="c">        {</span>
<span class="number"> 204</span><span class="c">       cout &lt;&lt; "Alpha of at least one pixel on bitmap is not 255. Aborting in case this matters.\n\n";</span>
<span class="number"> 205</span><span class="c">       cout &lt;&lt; "x = " &lt;&lt; x &lt;&lt; "y = " &lt;&lt; y &lt;&lt; " a1 = " &lt;&lt; a1 &lt;&lt; " a2 = " &lt;&lt; a2 &lt;&lt; "\n\n";</span>
<span class="number"> 206</span><span class="c">       return 1;  </span>
<span class="number"> 207</span><span class="c">      }</span>
<span class="number"> 208</span><span class="c">        else </span>
<span class="number"> 209</span><span class="c">        * </span>
<span class="number"> 210</span><span class="c">        */</span>
<span class="number"> 211</span>        <span class="c">/*</span>
<span class="number"> 212</span><span class="c">        if( (r1 != g1 || g1 != b1 || r1 != b1) )</span>
<span class="number"> 213</span><span class="c">        {</span>
<span class="number"> 214</span><span class="c">       cout &lt;&lt; "A pixel on bitmap 1 is not grey.\n\n";  </span>
<span class="number"> 215</span><span class="c">       return 1;</span>
<span class="number"> 216</span><span class="c">      }</span>
<span class="number"> 217</span><span class="c">      else if( (r2 != g2 || g2 != b2 || r2 != b2) )</span>
<span class="number"> 218</span><span class="c">        {</span>
<span class="number"> 219</span><span class="c">       cout &lt;&lt; "A pixel on bitmap 2 is not grey.\n\n";  </span>
<span class="number"> 220</span><span class="c">       return 1;</span>
<span class="number"> 221</span><span class="c">      }</span>
<span class="number"> 222</span><span class="c">      */</span>
<span class="number"> 223</span>      
<span class="number"> 224</span>      <span class="k1">switch</span><span class="k2">(</span>blend_type<span class="k2">)</span>
<span class="number"> 225</span>      <span class="k2">{</span>
<span class="number"> 226</span>         <span class="k1">case</span> BLEND_MODE_AVERAGE:
<span class="number"> 227</span>         
<span class="number"> 228</span>            new_gray <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span> <span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> r1 <span class="k3">+</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> r2<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>        
<span class="number"> 230</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 231</span>         <span class="k1">case</span> BLEND_MODE_DARKEST:
<span class="number"> 232</span>            
<span class="number"> 233</span>            new_gray <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span> <span class="k2">(</span>r1 <span class="k3">&gt;</span> r2<span class="k2">)</span> ?  r1 <span class="k2">:</span> r2<span class="k2">;</span>
<span class="number"> 234</span>           
<span class="number"> 235</span>              <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 236</span>        <span class="k2">}</span>
<span class="number"> 237</span>        
<span class="number"> 238</span>        <span class="c">//cout &lt;&lt; "new_gray = " &lt;&lt; (int) new_gray &lt;&lt; "\n";</span>
<span class="number"> 239</span>        
<span class="number"> 240</span>        new_colour <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">24</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">|</span> <span class="n">255</span><span class="k2">;</span>
<span class="number"> 241</span>        
<span class="number"> 242</span>        
<span class="number"> 243</span>        <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>r1 <span class="k3">=</span><span class="k3">=</span> mr <span class="k3">&amp;</span><span class="k3">&amp;</span> g1 <span class="k3">=</span><span class="k3">=</span> mg <span class="k3">&amp;</span><span class="k3">&amp;</span> b1 <span class="k3">=</span><span class="k3">=</span> mb<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>r2 <span class="k3">=</span><span class="k3">=</span> mr <span class="k3">&amp;</span><span class="k3">&amp;</span> g2 <span class="k3">=</span><span class="k3">=</span> mg <span class="k3">&amp;</span><span class="k3">&amp;</span> b2 <span class="k3">=</span><span class="k3">=</span> mb<span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 244</span>        <span class="k2">{</span>
<span class="number"> 245</span>       <span class="c">/* Put */</span>
<span class="number"> 246</span>        
<span class="number"> 247</span>        <span class="c">//cout &lt;&lt; "white.\n";</span>
<span class="number"> 248</span>       <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xffffffff</span><span class="k2">;</span>
<span class="number"> 249</span>        <span class="k2">}</span>
<span class="number"> 250</span>        <span class="k1">else</span>
<span class="number"> 251</span>        <span class="k2">{</span>
<span class="number"> 252</span>       <span class="c">//cout &lt;&lt; "grey.\n";</span>
<span class="number"> 253</span>       <span class="c">//cout &lt;&lt; "x = " &lt;&lt; x &lt;&lt; "y = " &lt;&lt; y &lt;&lt; "\n\n";</span>
<span class="number"> 254</span>           <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k2">)</span> <span class="k3">=</span> new_colour<span class="k2">;</span>
<span class="number"> 255</span>        <span class="k2">}</span>
<span class="number"> 256</span>     <span class="k2">}</span>
<span class="number"> 257</span>  <span class="k2">}</span>
<span class="number"> 258</span>  
<span class="number"> 259</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"unlocking bitmaps.\n"</span><span class="k2">;</span>
<span class="number"> 260</span>  
<span class="number"> 261</span>  
<span class="number"> 262</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> bw1 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 263</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> bw2 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 264</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> output <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 265</span>  
<span class="number"> 266</span>  
<span class="number"> 267</span>  
<span class="number"> 268</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">"output.png"</span>, output<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 269</span>  
<span class="number"> 270</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 06 Aug 2013 19:39:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The symbol name suggests it&#39;s crashing in cout. Compile with debugging (use -g command line switch to gcc/g++). Then try again, it should tell you a line number. Also run &quot;bt&quot; in gdb after it crashes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 06 Aug 2013 20:08:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>g<span class="k3">+</span><span class="k3">+</span> colourer.cpp shade_coloured_picture.cpp merge_black_and_white.cpp text_output_management.cpp <span class="k3">-</span>o colourer.exe <span class="k3">-</span>lallegro-5.0.5-monolith-md
</pre></div></div><p>

Where do I put the -g in this line please ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 06 Aug 2013 20:21:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Doesn&#39;t really matter, but let&#39;s just say &quot;g++ -g ...&quot; <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 06 Aug 2013 20:28:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>

Thanks.</p><p>Got some better output :-</p><p>Program received signal SIGSEGV, Segmentation fault.<br />0x00402530 in _fu64___ZSt4cout () at merge_black_and_white.cpp:228<br />228                   r2 = (int) *(ptr2 + 3);<br />(gdb)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 06 Aug 2013 20:41:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So that means line 228 in merge_black_and_white.cpp is what&#39;s crashing. Is that what we&#39;re looking at? If so I don&#39;t think your code listing is up to date because that&#39;s not what line 228 looks like.</p><p>EDIT: make sure your code and executable are matching.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 06 Aug 2013 20:45:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay. nm the code so far. </p><p>This 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>cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"pitch members of locks :"</span><span class="k2">;</span>
<span class="number">   2</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"lock1-&gt;pitch = "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> lock1-&gt;pitch <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n"</span><span class="k2">;</span>
<span class="number">   3</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"lock2-&gt;pitch = "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> lock2-&gt;pitch <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n"</span><span class="k2">;</span>
<span class="number">   4</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"lock3-&gt;pitch = "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> lock3-&gt;pitch <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n"</span><span class="k2">;</span>
<span class="number">   5</span>    
<span class="number">   6</span>    <span class="c">/***************************************************************************************************/</span>
<span class="number">   7</span>    <span class="c">/****************** Get the colour which is the mask colour. ***************************************/</span>
<span class="number">   8</span>    <span class="c">/***************************************************************************************************/</span>
<span class="number">   9</span>    
<span class="number">  10</span>    
<span class="number">  11</span>    <span class="k1">if</span><span class="k2">(</span> get_mask_colour<span class="k2">(</span>cfg, <span class="k3">&amp;</span>mr, <span class="k3">&amp;</span>mg, <span class="k3">&amp;</span>mb<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number">  12</span>  <span class="k2">{</span>
<span class="number">  13</span>       cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Couldn't get mask colour from configuration file.\n\n"</span><span class="k2">;</span>
<span class="number">  14</span>       <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  15</span>  <span class="k2">}</span>
<span class="number">  16</span>  
<span class="number">  17</span>  <span class="c">/***************************************************************************************************/</span>
<span class="number">  18</span>  
<span class="number">  19</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"processing bitmaps.\n\n"</span><span class="k2">;</span>
<span class="number">  20</span>  
<span class="number">  21</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> bh<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y <span class="k2">)</span>
<span class="number">  22</span>  <span class="k2">{</span>
<span class="number">  23</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> bw<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x <span class="k2">)</span>
<span class="number">  24</span>     <span class="k2">{</span>  
<span class="number">  25</span>      <span class="c">//cout &lt;&lt; "y = " &lt;&lt; y &lt;&lt; "x = " &lt;&lt; x &lt;&lt; "\n\n";</span>
<span class="number">  26</span>      
<span class="number">  27</span>      <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&gt;</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>output<span class="k2">)</span><span class="k2">)</span>
<span class="number">  28</span>      <span class="k2">{</span>
<span class="number">  29</span>        cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"problem 1000.\n"</span><span class="k2">;</span>
<span class="number">  30</span>        <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  31</span>        <span class="k2">}</span>
<span class="number">  32</span>        
<span class="number">  33</span>        <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&gt;</span><span class="k3">=</span> lock1-&gt;pitch<span class="k2">)</span>
<span class="number">  34</span>        <span class="k2">{</span>
<span class="number">  35</span>       cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"x outside bitmap (1).\n"</span><span class="k2">;</span>
<span class="number">  36</span>       <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number">  37</span>      <span class="k2">}</span>
<span class="number">  38</span>      
<span class="number">  39</span>      <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&gt;</span><span class="k3">=</span> lock2-&gt;pitch<span class="k2">)</span>
<span class="number">  40</span>      <span class="k2">{</span>
<span class="number">  41</span>       cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"x outside bitmap (2).\n"</span><span class="k2">;</span>
<span class="number">  42</span>       <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number">  43</span>      <span class="k2">}</span> 
<span class="number">  44</span>      
<span class="number">  45</span>      <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&gt;</span><span class="k3">=</span> lock3-&gt;pitch<span class="k2">)</span>
<span class="number">  46</span>      <span class="k2">{</span>
<span class="number">  47</span>       cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"x outside bitmap (3).\n"</span><span class="k2">;</span>
<span class="number">  48</span>       
<span class="number">  49</span>       cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"pitch of lock3 is "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> lock3-&gt;pitch <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" x is "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> x <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n\n"</span><span class="k2">;</span>
<span class="number">  50</span>       
<span class="number">  51</span>       <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>  
<span class="number">  52</span>      <span class="k2">}</span>
<span class="number">  53</span>      
<span class="number">  54</span>      
<span class="number">  55</span>      ptr1 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock1<span class="k2">)</span> <span class="k3">+</span> lock1-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  56</span>      ptr2 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock2<span class="k2">)</span> <span class="k3">+</span> lock2-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  57</span>      ptr3 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span> <span class="k3">*</span><span class="k2">)</span> lock3<span class="k2">)</span> <span class="k3">+</span> lock3-&gt;pitch <span class="k3">*</span> y <span class="k3">+</span> x <span class="k3">*</span> <span class="n">4</span><span class="k2">;</span>
<span class="number">  58</span>     
<span class="number">  59</span>      
<span class="number">  60</span>      r1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>      g1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>      b1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>        a1 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr1 <span class="k3">+</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>        
<span class="number">  65</span>        r2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>        g2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>        b2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>        a2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span> <span class="k3">*</span><span class="k2">(</span>ptr2 <span class="k3">+</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>        
<span class="number">  70</span>        <span class="c">/*</span>
<span class="number">  71</span><span class="c">        if(a1 != 255 || a2 != 255)</span>
<span class="number">  72</span><span class="c">        {</span>
<span class="number">  73</span><span class="c">       cout &lt;&lt; "Alpha of at least one pixel on bitmap is not 255. Aborting in case this matters.\n\n";</span>
<span class="number">  74</span><span class="c">       cout &lt;&lt; "x = " &lt;&lt; x &lt;&lt; "y = " &lt;&lt; y &lt;&lt; " a1 = " &lt;&lt; a1 &lt;&lt; " a2 = " &lt;&lt; a2 &lt;&lt; "\n\n";</span>
<span class="number">  75</span><span class="c">       return 1;  </span>
<span class="number">  76</span><span class="c">      }</span>
<span class="number">  77</span><span class="c">        else </span>
<span class="number">  78</span><span class="c">        * </span>
<span class="number">  79</span><span class="c">        */</span>
<span class="number">  80</span>        <span class="c">/*</span>
<span class="number">  81</span><span class="c">        if( (r1 != g1 || g1 != b1 || r1 != b1) )</span>
<span class="number">  82</span><span class="c">        {</span>
<span class="number">  83</span><span class="c">       cout &lt;&lt; "A pixel on bitmap 1 is not grey.\n\n";  </span>
<span class="number">  84</span><span class="c">       return 1;</span>
<span class="number">  85</span><span class="c">      }</span>
<span class="number">  86</span><span class="c">      else if( (r2 != g2 || g2 != b2 || r2 != b2) )</span>
<span class="number">  87</span><span class="c">        {</span>
<span class="number">  88</span><span class="c">       cout &lt;&lt; "A pixel on bitmap 2 is not grey.\n\n";  </span>
<span class="number">  89</span><span class="c">       return 1;</span>
<span class="number">  90</span><span class="c">      }</span>
<span class="number">  91</span><span class="c">      */</span>
<span class="number">  92</span>      
<span class="number">  93</span>      <span class="k1">switch</span><span class="k2">(</span>blend_type<span class="k2">)</span>
<span class="number">  94</span>      <span class="k2">{</span>
<span class="number">  95</span>         <span class="k1">case</span> BLEND_MODE_AVERAGE:
<span class="number">  96</span>         
<span class="number">  97</span>            new_gray <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span> <span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> r1 <span class="k3">+</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span> r2<span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>        
<span class="number">  99</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 100</span>         <span class="k1">case</span> BLEND_MODE_DARKEST:
<span class="number"> 101</span>            
<span class="number"> 102</span>            new_gray <span class="k3">=</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">char</span><span class="k2">)</span> <span class="k2">(</span>r1 <span class="k3">&gt;</span> r2<span class="k2">)</span> ?  r1 <span class="k2">:</span> r2<span class="k2">;</span>
<span class="number"> 103</span>           
<span class="number"> 104</span>              <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 105</span>        <span class="k2">}</span>
<span class="number"> 106</span>        
<span class="number"> 107</span>        <span class="c">//cout &lt;&lt; "new_gray = " &lt;&lt; (int) new_gray &lt;&lt; "\n";</span>
<span class="number"> 108</span>        
<span class="number"> 109</span>        new_colour <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">24</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">16</span><span class="k2">)</span> <span class="k3">|</span> <span class="k2">(</span><span class="k2">(</span>new_gray<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="n">8</span><span class="k2">)</span> <span class="k3">|</span> <span class="n">255</span><span class="k2">;</span>
<span class="number"> 110</span>        
<span class="number"> 111</span>        
<span class="number"> 112</span>        <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>r1 <span class="k3">=</span><span class="k3">=</span> mr <span class="k3">&amp;</span><span class="k3">&amp;</span> g1 <span class="k3">=</span><span class="k3">=</span> mg <span class="k3">&amp;</span><span class="k3">&amp;</span> b1 <span class="k3">=</span><span class="k3">=</span> mb<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>r2 <span class="k3">=</span><span class="k3">=</span> mr <span class="k3">&amp;</span><span class="k3">&amp;</span> g2 <span class="k3">=</span><span class="k3">=</span> mg <span class="k3">&amp;</span><span class="k3">&amp;</span> b2 <span class="k3">=</span><span class="k3">=</span> mb<span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 113</span>        <span class="k2">{</span>
<span class="number"> 114</span>       <span class="c">/* Put */</span>
<span class="number"> 115</span>        
<span class="number"> 116</span>        <span class="c">//cout &lt;&lt; "white.\n";</span>
<span class="number"> 117</span>       <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k2">)</span> <span class="k3">=</span> <span class="n">0xffffffff</span><span class="k2">;</span>
<span class="number"> 118</span>        <span class="k2">}</span>
<span class="number"> 119</span>        <span class="k1">else</span>
<span class="number"> 120</span>        <span class="k2">{</span>
<span class="number"> 121</span>      
<span class="number"> 122</span>           <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span> ptr3<span class="k2">)</span> <span class="k3">=</span> new_colour<span class="k2">;</span>
<span class="number"> 123</span>        <span class="k2">}</span>
<span class="number"> 124</span>     <span class="k2">}</span>
<span class="number"> 125</span>  <span class="k2">}</span>
<span class="number"> 126</span>  
<span class="number"> 127</span>  cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"unlocking bitmaps.\n"</span><span class="k2">;</span>
<span class="number"> 128</span>  
<span class="number"> 129</span>  
<span class="number"> 130</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> bw1 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> bw2 <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>  <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span> output <span class="k2">)</span><span class="k2">;</span>
</div></div><p>


...gives this output :-</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>Name of bitmap <span class="n">1</span> is tree1_bw.png
<span class="number">  2</span>
<span class="number">  3</span>Attempting to load tree1_bw.png
<span class="number">  4</span>
<span class="number">  5</span><span class="k2">[</span>New Thread <span class="n">4644</span>.<span class="n">0xa6c</span><span class="k2">]</span>
<span class="number">  6</span>Loaded it.
<span class="number">  7</span>Name of bitmap <span class="n">2</span> is tree2_bw.png
<span class="number">  8</span>
<span class="number">  9</span>Attempting to load tree2_bw.png
<span class="number"> 10</span>
<span class="number"> 11</span>Loaded it.
<span class="number"> 12</span>bw1 <span class="k2">:</span> <span class="n">1938</span> <span class="k3">*</span> <span class="n">3486</span>
<span class="number"> 13</span>
<span class="number"> 14</span> bw2 <span class="k2">:</span> <span class="n">1938</span> <span class="k3">*</span> <span class="n">3486</span>
<span class="number"> 15</span>
<span class="number"> 16</span> locked bitmap <span class="n">1</span>.
<span class="number"> 17</span>
<span class="number"> 18</span> locked bitmap <span class="n">2</span>.
<span class="number"> 19</span>
<span class="number"> 20</span>output bitmap <span class="k2">:</span> <span class="n">1938</span> <span class="k3">*</span> <span class="n">3486</span>
<span class="number"> 21</span>
<span class="number"> 22</span>Getting blend type.
<span class="number"> 23</span>pitch members of locks <span class="k2">:</span>lock1-&gt;pitch <span class="k3">=</span> <span class="n">7752</span>
<span class="number"> 24</span>lock2-&gt;pitch <span class="k3">=</span> <span class="n">7752</span>
<span class="number"> 25</span>lock3-&gt;pitch <span class="k3">=</span> <span class="n">7752</span>
<span class="number"> 26</span>processing bitmaps.
<span class="number"> 27</span>
<span class="number"> 28</span>x outside bitmap <span class="k2">(</span><span class="n">3</span><span class="k2">)</span>.
<span class="number"> 29</span>pitch of lock3 is <span class="n">255</span> x is <span class="n">255</span>
<span class="number"> 30</span>
<span class="number"> 31</span>Press any <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a> to <span class="k1">continue</span> . . .
<span class="number"> 32</span>Program received <a href="http://www.delorie.com/djgpp/doc/libc/libc_724.html" target="_blank">signal</a> SIGSEGV, Segmentation fault.
</div></div><p>


Which means the pitch of lock3 is changed to 255 at some point.</p><p>Any ideas what this could be ?</p><p>Memory corruption ?</p><p>EDIT :</p><p>Would this do anything :-</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;stdint.h&gt;</span>
</pre></div></div><p>

It&#39;s at the top of the source file.<br />I tried doing</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;cstdint&gt;</span>
</pre></div></div><p>

..but the compiler complained.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 06 Aug 2013 21:01:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oop! I didn&#39;t notice this... instead of using ((unsigned char *)lock1) etc, use lock1-&gt;data. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trent Gamblin)</author>
		<pubDate>Tue, 06 Aug 2013 21:25:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Many thanks Trent! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Tue, 06 Aug 2013 21:26:55 +0000</pubDate>
	</item>
</rss>
