<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>using a photo to floofill a bitmap</title>
		<link>http://www.allegro.cc/forums/view/618645</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 29 Apr 2022 20:12:00 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi,</p><p> for my art program I want to be able to use a photo to floodfill one colour of a bitmap which has only two colours.</p><p>Here&#39;s the specific case which was the example which inspired the idea :</p><p>Bitmap to floodfill :</p><p><span class="remote-thumbnail"><span class="json">{"name":"613167","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/6\/b61f33feee3867ad2532d91c46aa86fe.png","w":2495,"h":1785,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/b\/6\/b61f33feee3867ad2532d91c46aa86fe"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/b/6/b61f33feee3867ad2532d91c46aa86fe-240.jpg" alt="613167" width="240" height="171" /></span></p><p>Photo to use :</p><p><span class="remote-thumbnail"><span class="json">{"name":"613168","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/6\/c6619f459ea931d79866b3a4685369b2.png","w":1920,"h":2560,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/6\/c6619f459ea931d79866b3a4685369b2"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/c/6/c6619f459ea931d79866b3a4685369b2-240.jpg" alt="613168" width="240" height="320" /></span></p><p>The reason I want to use the photo is because if I use the bitmap as it is to colour my drawing it looks too uniform and boring :</p><p><span class="remote-thumbnail"><span class="json">{"name":"613171","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/e\/5e6da9e45b64d4937e693932fa37e6e9.png","w":1200,"h":858,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/5\/e\/5e6da9e45b64d4937e693932fa37e6e9"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/e/5e6da9e45b64d4937e693932fa37e6e9-240.jpg" alt="613171" width="240" height="171" /></span></p><p>I&#39;d like the buildings brick and all the stone areas of the drawing to look as if they&#39;re made of the same sanstone (or whatever it really is) in the photo.</p><p>One idea I have is to just iterate through all the pixels on the 2-tone bitmap which need floodfilling and replace them with a randomly selected pixel from the<br />photo. </p><p>Another idea I&#39;ve got is to tile the 2-tone bitmap which needs floodfilling with randomly chosen squares of the photo and then blur the edges of the squares.</p><p>Finally, I thought I might be able to somehow use Joel Pettersson&#39;s noise code<br />which he meantioned on this thread</p><p><a href="https://www.allegro.cc/forums/thread/618617">https://www.allegro.cc/forums/thread/618617</a></p><p>Hopefully, I&#39;ve made myself my clear.<br />Just posting in case anyone&#39;s got any useful ideas of what I could do to get a good result.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Sun, 10 Apr 2022 17:58:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Write a shader that takes two colors and three images and multiply blends if they are a certain color with the second texture onto the first (your drawing).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 10 Apr 2022 19:36:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar.</p><p>I&#39;m not sure I can write a shader but I like a challenge. Sounds like a good idea.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Sun, 10 Apr 2022 20:03:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Luckily shaders are very simple programs. You just have to understand the pipeline and where it flows in the gpu.</p><p>bump for progress.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 17 Apr 2022 19:21:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Out of curiosity Edgar, why would you pass 3 bitmaps to the shader? Would it be the photo, the image to fill, and then a copy to perform the multiplier on?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Sun, 17 Apr 2022 23:13:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It would be 3 images because you need the stencil, the texture, and the bitmap to draw onto. So maybe two if you don&#39;t count the drawing target.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 18 Apr 2022 09:36:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Many thanks for keeping the thread going and for the extra input. I&#39;ve been very busy. Trying to learn about shaders (I&#39;ve bought a book). I found the Arithmetic button in PSP7 which does blending. I also had to get up to date with allegro 5 (5.2.7.0). I was delighted I managed to compile it.</p><p>I don&#39;t know if there&#39;s any point in me posting yet but I&#39;d like to keep the thread going.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Thu, 21 Apr 2022 21:01:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you&#39;re not concerned about speed, you can also do it by locking bitmaps and reading / writing memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 22 Apr 2022 17:44:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks. I&#39;m currently stuck with a makefile. I haven&#39;t used makefiles in years.<br />Every time I run mingw32-make Makefile on the following I get</p><p>mingw32-make: Nothing to be done for &#39;Makefile&#39;.</p><p>There aren&#39;t any object or executable files in or below the folder I&#39;m using.<br />Without the seemingly magical abilities of code::blocks and it&#39;s makefile generation I&#39;m stuck. Perhaps there&#39;s something obvious I&#39;ve done wrong? Please help.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#art_program makefile</span>
<span class="number">   2</span>
<span class="number">   3</span>
<span class="number">   4</span>It<span class="s">'s alright, I'</span>ve got it working now.
<span class="number">   5</span>
<span class="number">   6</span>
<span class="number">   7</span>
<span class="number">   8</span>
<span class="number">   9</span>
<span class="number">  10</span>
<span class="number">  11</span>
<span class="number">  12</span>
<span class="number">  13</span>
<span class="number">  14</span>
<span class="number">  15</span>objects <span class="k3">=</span> colour_in_picture_with_positioning.o          \
<span class="number">  16</span>              data_class.o                                  \
<span class="number">  17</span>        file_loader.o                                 \
<span class="number">  18</span>        file_selector.o                               \
<span class="number">  19</span>        graphics_functions.o                          \
<span class="number">  20</span>        gui.o                                         \
<span class="number">  21</span>        input_output.o                                \
<span class="number">  22</span>        load_bitmaps.o                                \
<span class="number">  23</span>        load_file_prompt_mode.o                       \
<span class="number">  24</span>        main.o                                        \
<span class="number">  25</span>        main_menu.o                                   \
<span class="number">  26</span>        main_screen.o                                 \
<span class="number">  27</span>        make_negative_of_black_and_white_picture.o    \
<span class="number">  28</span>        make_one_pixel_translucent.o                  \
<span class="number">  29</span>        measure_image.o                               \
<span class="number">  30</span>        merge_black_and_white.o                       \
<span class="number">  31</span>        megre_black_and_white_type_2.o                \
<span class="number">  32</span>        miscellaneous.o                               \
<span class="number">  33</span>        resize_image.o                                \
<span class="number">  34</span>        resolutions_available.o                       \
<span class="number">  35</span>        rotate.o                                      \
<span class="number">  36</span>        shade_coloured_picture_without_positioning.o  \
<span class="number">  37</span>        shade_coloured_picture_with_positioning.o     \
<span class="number">  38</span>        simple_menu_mode.o                            \
<span class="number">  39</span>        texturise.o                                   \
<span class="number">  40</span>        translucent_shading.o                         \
<span class="number">  41</span>        two_tone_rotate.o                             
<span class="number">  42</span>      
<span class="number">  43</span>
<span class="number">  44</span>linker_flags <span class="k3">=</span> <span class="k3">-</span>lallegro-static <span class="k3">-</span>lallegro_primitives-static <span class="k3">-</span>lallegro_image-static <span class="k3">-</span>lallegro_font-static <span class="k3">-</span>lallegro_font-static <span class="k3">-</span>lallegro_dialog-static 
<span class="number">  45</span>
<span class="number">  46</span>
<span class="number">  47</span>lib_search_directories <span class="k3">=</span> <span class="k3">-</span>IC:\mingw64\lib\allegro5
<span class="number">  48</span>
<span class="number">  49</span>
<span class="number">  50</span>
<span class="number">  51</span>
<span class="number">  52</span>art_program.exe <span class="k2">:</span> $<span class="k2">(</span>objects<span class="k2">)</span>
<span class="number">  53</span>        g<span class="k3">+</span><span class="k3">+</span> $<span class="k2">(</span>objects<span class="k2">)</span> $<span class="k2">(</span>linker_flags<span class="k2">)</span> $<span class="k2">(</span>lib_search_directories<span class="k2">)</span> <span class="k3">-</span>o art_program 
<span class="number">  54</span>
<span class="number">  55</span>
<span class="number">  56</span>
<span class="number">  57</span>
<span class="number">  58</span>
<span class="number">  59</span>colour_in_picture_with_positioning.o <span class="k2">:</span> colour_in_picture_with_positioning.cpp colour_in_picture_with_positioning.hpp global.hpp input_output.hpp data_class.hpp gui.hpp build_type_defines.hpp main_menu.hpp simple_menu_mode.hpp
<span class="number">  60</span>    g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c colour_in_picture_with_positioning.cpp 
<span class="number">  61</span>      
<span class="number">  62</span>data_class.o <span class="k2">:</span> data_class.cpp data_class.hpp miscellaneous.hpp
<span class="number">  63</span>    g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c data_class.cpp <span class="k3">-</span>IC:\mingw64\include
<span class="number">  64</span>        
<span class="number">  65</span>file_loader.o <span class="k2">:</span> file_loader.cpp global.hpp file_loader.hpp
<span class="number">  66</span>    g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c file_loader.cpp
<span class="number">  67</span>                            
<span class="number">  68</span>file_selector.o <span class="k2">:</span> file_selector.cpp file_selector.hpp
<span class="number">  69</span>          g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c file_selector.cpp                     
<span class="number">  70</span>
<span class="number">  71</span>graphics_functions.o <span class="k2">:</span>  graphics_functions.cpp global.hpp graphics_functions.hpp
<span class="number">  72</span>            g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c graphics_functions.cpp
<span class="number">  73</span>                       
<span class="number">  74</span>gui.o <span class="k2">:</span> gui.cpp gui.hpp simple_menu_mode.hpp
<span class="number">  75</span>    g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c gui.cpp
<span class="number">  76</span>                       
<span class="number">  77</span>input_output.o <span class="k2">:</span> input_output.cpp input_output.hpp
<span class="number">  78</span>    g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c input_output.cpp
<span class="number">  79</span>                          
<span class="number">  80</span>load_bitmaps.o  <span class="k2">:</span> load_bitmaps.cpp load_bitmaps.hpp
<span class="number">  81</span>    g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c load_bitmaps.cpp
<span class="number">  82</span>                             
<span class="number">  83</span>load_file_prompt_mode.o <span class="k2">:</span> load_file_prompt_mode.cpp load_files_prompt_mode.hpp
<span class="number">  84</span>              g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c load_file_prompt_mode.cpp
<span class="number">  85</span>main.o <span class="k2">:</span>  main.cpp global.hpp input_output.hpp merge_black_and_white.hpp translucent_shading.hpp make_negative.hpp rotate_bitmap.hpp                    \
<span class="number">  86</span>                   graphics_functions.hpp shade_coloured_picture_without_positioing.hpp two_tone_rotate.hpp colour_in_picture_with_positioning.hpp      \
<span class="number">  87</span>                   resolutions_available.hpp measure_image.hpp main_screen.hpp post_task_menu.hpp load_GUI_bitmaps.hpp load_files_prompt_mode.hpp       \
<span class="number">  88</span>                   gui.hpp merge_black_and_white_type_2.hpp file_loader.hpp file_selector.hpp build_type_defines.hpp resize_image.hpp texturise.hpp     \
<span class="number">  89</span>      g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c main.cpp
<span class="number">  90</span>                                   
<span class="number">  91</span>main_menu.o <span class="k2">:</span> main_menu.cpp gui.hpp build_type_defines.hpp main_menu.hpp               
<span class="number">  92</span>        g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c main_menu.cpp
<span class="number">  93</span>
<span class="number">  94</span>main_screen.o <span class="k2">:</span> main_screen.cpp global.hpp input_output.hpp data_class.hpp
<span class="number">  95</span>          g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c main_screen.cpp
<span class="number">  96</span>
<span class="number">  97</span>make_negative_of_black_and_white_picture.o <span class="k2">:</span> make_negative_of_black_and_white_picture.cpp global.hpp load_bitmaps.hpp graphics_functions.hpp input_output.hpp make_negative.hpp
<span class="number">  98</span>                        g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c make_negative_of_black_and_white_picture.cpp
<span class="number">  99</span>
<span class="number"> 100</span>make_one_pixel_translucent.o <span class="k2">:</span> make_one_pixel_translucent.cpp include global.hpp include load_bitmaps.hpp graphics_functions.hpp make_one_pixel_translucent.hpp 
<span class="number"> 101</span>          g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c make_one_pixel_translucent.cpp
<span class="number"> 102</span>
<span class="number"> 103</span>measure_image.o <span class="k2">:</span> measure_image.cpp global.hpp input_output.hpp data_class.hpp gui.hpp build_type_defines.hpp measure_image.hpp    
<span class="number"> 104</span>          g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c measure_image.cpp
<span class="number"> 105</span>
<span class="number"> 106</span>merge_black_and_white.o <span class="k2">:</span> merge_black_and_white.cpp global.hpp graphics_functions.hpp input_output.hpp merge_black_and_white.hpp  
<span class="number"> 107</span>              g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c merge_black_and_white.cpp
<span class="number"> 108</span>              
<span class="number"> 109</span>megre_black_and_white_type_2.o <span class="k2">:</span> merge_black_and_white_type_2.cpp global.hpp graphics_functions.hpp input_output.hpp merge_black_and_white_type_2.hpp
<span class="number"> 110</span>                  g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c merge_black_and_white_type_2.cpp
<span class="number"> 111</span>
<span class="number"> 112</span>miscellaneous.o <span class="k2">:</span>  miscellaneous.cpp miscellaneous.hpp
<span class="number"> 113</span>          g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c miscellaneous.cpp
<span class="number"> 114</span>                        
<span class="number"> 115</span>resize_image.o <span class="k2">:</span>  resize_image.cpp
<span class="number"> 116</span>          g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c resize_image.cpp
<span class="number"> 117</span>                          
<span class="number"> 118</span>resolutions_available.o <span class="k2">:</span> resolutions_available.cpp resolutions_available.hpp
<span class="number"> 119</span>              g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c resolutions_available.cpp
<span class="number"> 120</span>                  
<span class="number"> 121</span>rotate.o <span class="k2">:</span> rotate.cpp global.hpp load_bitmaps.hpp graphics_functions.hpp make_one_pixel_translucent.hpp input_output.hpp rotate_bitmap.hpp
<span class="number"> 122</span>      g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c rotate.cpp
<span class="number"> 123</span>                            
<span class="number"> 124</span>shade_coloured_picture_without_positioning.o <span class="k2">:</span> shade_coloured_picture_without_positioning.cpp gui.hpp shade_coloured_picture_without_positioing.hpp
<span class="number"> 125</span>                        g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c shade_coloured_picture_without_positioning.cpp
<span class="number"> 126</span>
<span class="number"> 127</span>
<span class="number"> 128</span>simple_menu_mode.o <span class="k2">:</span> simple_menu_mode.cpp global.hpp input_output.hpp data_class.hpp gui.hpp build_type_defines.hpp main_menu.hpp simple_menu_mode.hpp
<span class="number"> 129</span>            g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c simple_menu_mode.cpp
<span class="number"> 130</span>
<span class="number"> 131</span>texturise.o <span class="k2">:</span> texturise.cpp global.hpp input_output.hpp data_class.hpp gui.hpp graphics_functions.hpp texturise.hpp
<span class="number"> 132</span>        g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c texturise.cpp
<span class="number"> 133</span>                             
<span class="number"> 134</span>translucent_shading.o <span class="k2">:</span> translucent_shading.cpp global.hpp load_bitmaps.hpp input_output.hpp stdint.h graphics_functions.hpp translucent_shading.hpp
<span class="number"> 135</span>              g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c translucent_shading.cpp
<span class="number"> 136</span>                        
<span class="number"> 137</span>two_tone_rotate.o <span class="k2">:</span> two_tone_rotate.cpp  two_tone_rotate.hpp
<span class="number"> 138</span>            g<span class="k3">+</span><span class="k3">+</span> <span class="k3">-</span>c two_tone_rotate.cpp
<span class="number"> 139</span>            
<span class="number"> 140</span>            
<span class="number"> 141</span>                     
<span class="number"> 142</span><span class="p">#end of file</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Fri, 22 Apr 2022 17:59:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I personally hate makefiles, so I can&#39;t help you there. Well wait. Default make target is &#39;all&#39; or the first rule in the makefile. </p><p>But I can help you with the algorithm to texture your photo.</p><p>Assuming all three images are the same size, you could use something like this :</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> CreateTexturedBitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> mask , <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> maskcolor , <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> texture , <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> image<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  3</span>   
<span class="number">  4</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> mlock <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> texlock <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> targetlock <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a><span class="k3">*</span> destlock <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  8</span>   
<span class="number">  9</span>   <span class="k1">int</span> blop <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 10</span>   <span class="k1">int</span> blsrc <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 11</span>   <span class="k1">int</span> bldest <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 12</span>   <a href="http://www.allegro.cc/manual/al_get_blender"><span class="a">al_get_blender</span></a><span class="k2">(</span><span class="k3">&amp;</span>blop , <span class="k3">&amp;</span>blsrc , <span class="k3">&amp;</span>bldest<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>   
<span class="number"> 14</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> oldtarget <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>   
<span class="number"> 16</span>   
<span class="number"> 17</span>   <span class="k1">unsigned</span> <span class="k1">int</span> w <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>image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>   <span class="k1">unsigned</span> <span class="k1">int</span> h <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>image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   <span class="k1">if</span> <span class="k2">(</span>al_get_bitmp_width<span class="k2">(</span>texture<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> w <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>texture<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> h <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>mask<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> w <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>mask<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> h<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Bitmaps not same size.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 22</span>   <span class="k2">}</span>
<span class="number"> 23</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> dest <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>w , h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>dest<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 25</span>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 26</span>   <span class="k2">}</span>
<span class="number"> 27</span>   <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>dest<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>   <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD , ALLEGRO_ONE , ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>   <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>   
<span class="number"> 31</span>   mlock <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>mask , ALLEGRO_PIXEL_FORMAT_ANY , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>mlock<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 33</span>      al_free_bitmap<span class="k2">(</span>dest<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>      dest <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 35</span>      <span class="k1">goto</span> cleanup<span class="k2">;</span>
<span class="number"> 36</span>   <span class="k2">}</span>
<span class="number"> 37</span>   
<span class="number"> 38</span>   texlock <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>texture , ALLEGRO_PIXEL_FORMAT_ANY , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>texlock<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 40</span>      al_free_bitmap<span class="k2">(</span>dest<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>      dest <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 42</span>      <span class="k1">goto</span> cleanup<span class="k2">;</span>
<span class="number"> 43</span>   <span class="k2">}</span>
<span class="number"> 44</span>   
<span class="number"> 45</span>   targetlock <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>target , ALLEGRO_PIXEL_FORMAT_ANY , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>imagelock<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 47</span>      al_free_bitmap<span class="k2">(</span>dest<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>      dest <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 49</span>      <span class="k1">goto</span> cleanup<span class="k2">;</span>
<span class="number"> 50</span>   <span class="k2">}</span>
<span class="number"> 51</span>
<span class="number"> 52</span>   destlock <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>dest , ALLEGRO_PIXEL_FORMAT_ANY , ALLEGRO_LOCK_READWRITE<span class="k2">)</span>
<span class="number"> 53</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>destlock<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 54</span>      al_free_bitmap<span class="k2">(</span>dest<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>      dest <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 56</span>      <span class="k1">goto</span> cleanup<span class="k2">;</span>
<span class="number"> 57</span>   <span class="k2">}</span>
<span class="number"> 58</span>
<span class="number"> 59</span>   <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>dest<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>   <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>ALLEGRO_ADD , ALLEGRO_DEST_COLOR , ALLEGRO_ZERO<span class="k2">)</span><span class="k2">;</span><span class="c">/// Multiply blender</span>
<span class="number"> 61</span>   
<span class="number"> 62</span>   <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> y <span class="k3">&lt;</span> h <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>y<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 63</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> x <span class="k3">&lt;</span> w <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>x<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 64</span>         <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> mcol <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>mask , x , y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 65</span>         <span class="k1">if</span> <span class="k2">(</span>mcol.r <span class="k3">=</span><span class="k3">=</span> maskcolor.r <span class="k3">&amp;</span><span class="k3">&amp;</span> mcol.g <span class="k3">=</span><span class="k3">=</span> maskcolor.g <span class="k3">&amp;</span><span class="k3">&amp;</span> mcol.b <span class="k3">=</span><span class="k3">=</span> maskcolor.b<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 66</span>            <span class="c">// pixel on mask bitmap matches maskcolor</span>
<span class="number"> 67</span>            <a href="http://www.allegro.cc/manual/al_put_blended_pixel"><span class="a">al_put_blended_pixel</span></a><span class="k2">(</span>x , y , <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>texture , x , y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span><span class="c">/// draw a blended pixel from the texture if it is the mask color</span>
<span class="number"> 68</span>         <span class="k2">}</span>
<span class="number"> 69</span>         <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 70</span>            <a href="http://www.allegro.cc/manual/al_put_pixel"><span class="a">al_put_pixel</span></a><span class="k2">(</span>x , y , <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>image , x , y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span><span class="c">/// draw a standard pixel from the image (non masked)</span>
<span class="number"> 71</span>         <span class="k2">}</span>
<span class="number"> 72</span>      <span class="k2">}</span>
<span class="number"> 73</span>   <span class="k2">}</span>
<span class="number"> 74</span>   
<span class="number"> 75</span>   
<span class="number"> 76</span>   cleanup:
<span class="number"> 77</span>   <span class="k1">if</span> <span class="k2">(</span>mlock<span class="k2">)</span> <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>mask<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 78</span>   <span class="k1">if</span> <span class="k2">(</span>texlock<span class="k2">)</span> <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>texture<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 79</span>   <span class="k1">if</span> <span class="k2">(</span>targetlock<span class="k2">)</span> <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>target<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 80</span>   <span class="k1">if</span> <span class="k2">(</span>destlock<span class="k2">)</span> <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>dest<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 81</span>   
<span class="number"> 82</span>   <a href="http://www.allegro.cc/manual/al_set_blender"><span class="a">al_set_blender</span></a><span class="k2">(</span>blop , blsrc , bldest<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 83</span>   <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>oldtarget<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 84</span>   
<span class="number"> 85</span>   <span class="k1">return</span> dest<span class="k2">;</span>
<span class="number"> 86</span><span class="k2">}</span>
</div></div><p>

<img src="http://www.allegro.cc/forums/smileys/cool.gif" alt="8-)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 23 Apr 2022 07:33:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Like this? A quick Gimp hack.</p><p>http://www.allegro.cc/files/attachment/613179</p><p>The sandstone wall is multiplied with the drawing. No further adjustments. I guess it should be lighter.</p><p>[edit]<br />I&#39;ve lost the touch. How do you add images?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Sat, 23 Apr 2022 17:27:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OR, you can cheat and use GIMP like Johan. ;P</p><p><span class="remote-thumbnail"><span class="json">{"name":"613179","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/a\/0a19467d5b6a5f110768fc7349de4489.jpg","w":1024,"h":732,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/0\/a\/0a19467d5b6a5f110768fc7349de4489"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/0/a/0a19467d5b6a5f110768fc7349de4489-240.jpg" alt="613179" width="240" height="171" /></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 23 Apr 2022 17:47:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Many thanks to the both of you. It&#39;s nice to know I&#39;ve got options and to see what GIMP can do. Certainly the result is closer to what I&#39;d hoped for in the beginning.<br />It&#39;d be a shame for Edgar&#39;s nicely written code to go to waste so I&#39;ll put that to use given the time. Thanks again. </p><p>EDIT B|</p><p>EDIT 2 I&#39;ve got a feeling I find all this harder than you two. I think I try too hard.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (William Labbett)</author>
		<pubDate>Sat, 23 Apr 2022 20:27:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just so you know a multiply blender just darkens the pixel. You can use it with any texture. And that will transfer the pattern to the destination.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 24 Apr 2022 04:29:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello William, I have created a basic (OpenGL) shader and program for you. It uses the map and texture, and you set an RGB value, if the shader finds the corresponding RGB value in the map, it multiplies the drawn image (the sketch) with the texture, resulting in the attached image:</p><p><span class="remote-thumbnail"><span class="json">{"name":"Wdhf2t.png","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/1\/7\/176e9f76850905c5186d1cfd0700b7bf.png","w":1200,"h":768,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/1\/7\/176e9f76850905c5186d1cfd0700b7bf"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/1/7/176e9f76850905c5186d1cfd0700b7bf-240.jpg" alt="Wdhf2t.png" width="240" height="153" /></span></p><p>Also attached is a zip file containing the shader files, the code and the images which I resized to make life easier.</p><p>It may be a good starting point for you if you wan&#39;t to write a shader!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Fri, 29 Apr 2022 20:12:00 +0000</pubDate>
	</item>
</rss>
