mc_dot_art_maker 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (470) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Rakefile +7 -0
  4. data/lib/mc_dot_art_maker/block.rb +6 -9
  5. data/lib/mc_dot_art_maker/block_list.rb +2 -2
  6. data/lib/mc_dot_art_maker/dot.rb +51 -18
  7. data/lib/mc_dot_art_maker/extern_lib_extension.rb +11 -0
  8. data/lib/mc_dot_art_maker/maker.rb +118 -97
  9. data/lib/mc_dot_art_maker/schematic_helper.rb +1 -1
  10. data/lib/mc_dot_art_maker/texture_loader.rb +2 -9
  11. data/lib/mc_dot_art_maker/utils.rb +28 -28
  12. data/mc_dot_art_maker.gemspec +1 -1
  13. data/test/images/src/test_image_cat.jpg +0 -0
  14. data/test/images/tmp/normal_conversion_mosaic.png +0 -0
  15. data/test/images/tmp/normal_conversion_mosaic_with_magick__image.png +0 -0
  16. data/test/images/tmp/normal_conversion_schematic.schematic +0 -0
  17. data/test/images/tmp/{dither_methods_RiemersmaDitherMethod.png → normal_conversion_texture.png} +0 -0
  18. data/test/images/tmp/normal_conversion_texture_with_magick__image.png +0 -0
  19. data/test/test_block_list.rb +8 -0
  20. data/test/test_dither_method.rb +5 -5
  21. data/test/test_dot.rb +44 -0
  22. data/test/test_maker.rb +74 -0
  23. data/test/test_normal_conversion.rb +67 -14
  24. data/test/test_texture_loader.rb +9 -1
  25. metadata +10 -448
  26. data/lib/mc_dot_art_maker/textures/brick.png +0 -0
  27. data/lib/mc_dot_art_maker/textures/clay.png +0 -0
  28. data/lib/mc_dot_art_maker/textures/coal_block.png +0 -0
  29. data/lib/mc_dot_art_maker/textures/diamond_block.png +0 -0
  30. data/lib/mc_dot_art_maker/textures/emerald_block.png +0 -0
  31. data/lib/mc_dot_art_maker/textures/glowstone.png +0 -0
  32. data/lib/mc_dot_art_maker/textures/gold_block.png +0 -0
  33. data/lib/mc_dot_art_maker/textures/hardened_clay.png +0 -0
  34. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_black.png +0 -0
  35. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_blue.png +0 -0
  36. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_brown.png +0 -0
  37. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_cyan.png +0 -0
  38. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_gray.png +0 -0
  39. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_green.png +0 -0
  40. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_light_blue.png +0 -0
  41. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_lime.png +0 -0
  42. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_magenta.png +0 -0
  43. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_orange.png +0 -0
  44. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_pink.png +0 -0
  45. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_purple.png +0 -0
  46. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_red.png +0 -0
  47. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_silver.png +0 -0
  48. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_white.png +0 -0
  49. data/lib/mc_dot_art_maker/textures/hardened_clay_stained_yellow.png +0 -0
  50. data/lib/mc_dot_art_maker/textures/hay_block_top.png +0 -0
  51. data/lib/mc_dot_art_maker/textures/ice.png +0 -0
  52. data/lib/mc_dot_art_maker/textures/iron_block.png +0 -0
  53. data/lib/mc_dot_art_maker/textures/lapis_block.png +0 -0
  54. data/lib/mc_dot_art_maker/textures/melon_top.png +0 -0
  55. data/lib/mc_dot_art_maker/textures/nether_brick.png +0 -0
  56. data/lib/mc_dot_art_maker/textures/obsidian.png +0 -0
  57. data/lib/mc_dot_art_maker/textures/planks_birch.png +0 -0
  58. data/lib/mc_dot_art_maker/textures/planks_jungle.png +0 -0
  59. data/lib/mc_dot_art_maker/textures/planks_oak.png +0 -0
  60. data/lib/mc_dot_art_maker/textures/planks_spruce.png +0 -0
  61. data/lib/mc_dot_art_maker/textures/quartz_block_chiseled_top.png +0 -0
  62. data/lib/mc_dot_art_maker/textures/redstone_block.png +0 -0
  63. data/lib/mc_dot_art_maker/textures/sandstone_top.png +0 -0
  64. data/lib/mc_dot_art_maker/textures/soul_sand.png +0 -0
  65. data/lib/mc_dot_art_maker/textures/sponge.png +0 -0
  66. data/lib/mc_dot_art_maker/textures/stonebrick_carved.png +0 -0
  67. data/lib/mc_dot_art_maker/textures/stonebrick_mossy.png +0 -0
  68. data/lib/mc_dot_art_maker/textures/tmp/1.9.jar +0 -0
  69. data/lib/mc_dot_art_maker/textures/wool_colored_black.png +0 -0
  70. data/lib/mc_dot_art_maker/textures/wool_colored_blue.png +0 -0
  71. data/lib/mc_dot_art_maker/textures/wool_colored_brown.png +0 -0
  72. data/lib/mc_dot_art_maker/textures/wool_colored_cyan.png +0 -0
  73. data/lib/mc_dot_art_maker/textures/wool_colored_gray.png +0 -0
  74. data/lib/mc_dot_art_maker/textures/wool_colored_green.png +0 -0
  75. data/lib/mc_dot_art_maker/textures/wool_colored_light_blue.png +0 -0
  76. data/lib/mc_dot_art_maker/textures/wool_colored_lime.png +0 -0
  77. data/lib/mc_dot_art_maker/textures/wool_colored_magenta.png +0 -0
  78. data/lib/mc_dot_art_maker/textures/wool_colored_orange.png +0 -0
  79. data/lib/mc_dot_art_maker/textures/wool_colored_pink.png +0 -0
  80. data/lib/mc_dot_art_maker/textures/wool_colored_purple.png +0 -0
  81. data/lib/mc_dot_art_maker/textures/wool_colored_red.png +0 -0
  82. data/lib/mc_dot_art_maker/textures/wool_colored_silver.png +0 -0
  83. data/lib/mc_dot_art_maker/textures/wool_colored_white.png +0 -0
  84. data/lib/mc_dot_art_maker/textures/wool_colored_yellow.png +0 -0
  85. data/test/images/tmp/dither_methods_FloydSteinbergDitherMethod.png +0 -0
  86. data/test/images/tmp/dither_methods_NoDitherMethod.png +0 -0
  87. data/test/test_block_palette.rb +0 -29
  88. data/textures/anvil_base.png +0 -0
  89. data/textures/anvil_top_damaged_0.png +0 -0
  90. data/textures/anvil_top_damaged_1.png +0 -0
  91. data/textures/anvil_top_damaged_2.png +0 -0
  92. data/textures/beacon.png +0 -0
  93. data/textures/bed_feet_end.png +0 -0
  94. data/textures/bed_feet_side.png +0 -0
  95. data/textures/bed_feet_top.png +0 -0
  96. data/textures/bed_head_end.png +0 -0
  97. data/textures/bed_head_side.png +0 -0
  98. data/textures/bed_head_top.png +0 -0
  99. data/textures/bedrock.png +0 -0
  100. data/textures/bookshelf.png +0 -0
  101. data/textures/brewing_stand.png +0 -0
  102. data/textures/brewing_stand_base.png +0 -0
  103. data/textures/brick.png +0 -0
  104. data/textures/cactus_bottom.png +0 -0
  105. data/textures/cactus_side.png +0 -0
  106. data/textures/cactus_top.png +0 -0
  107. data/textures/cake_bottom.png +0 -0
  108. data/textures/cake_inner.png +0 -0
  109. data/textures/cake_side.png +0 -0
  110. data/textures/cake_top.png +0 -0
  111. data/textures/carrots_stage_0.png +0 -0
  112. data/textures/carrots_stage_1.png +0 -0
  113. data/textures/carrots_stage_2.png +0 -0
  114. data/textures/carrots_stage_3.png +0 -0
  115. data/textures/cauldron_bottom.png +0 -0
  116. data/textures/cauldron_inner.png +0 -0
  117. data/textures/cauldron_side.png +0 -0
  118. data/textures/cauldron_top.png +0 -0
  119. data/textures/clay.png +0 -0
  120. data/textures/coal_block.png +0 -0
  121. data/textures/coal_ore.png +0 -0
  122. data/textures/coarse_dirt.png +0 -0
  123. data/textures/cobblestone.png +0 -0
  124. data/textures/cobblestone_mossy.png +0 -0
  125. data/textures/cocoa_stage_0.png +0 -0
  126. data/textures/cocoa_stage_1.png +0 -0
  127. data/textures/cocoa_stage_2.png +0 -0
  128. data/textures/command_block.png +0 -0
  129. data/textures/comparator_off.png +0 -0
  130. data/textures/comparator_on.png +0 -0
  131. data/textures/crafting_table_front.png +0 -0
  132. data/textures/crafting_table_side.png +0 -0
  133. data/textures/crafting_table_top.png +0 -0
  134. data/textures/daylight_detector_inverted_top.png +0 -0
  135. data/textures/daylight_detector_side.png +0 -0
  136. data/textures/daylight_detector_top.png +0 -0
  137. data/textures/deadbush.png +0 -0
  138. data/textures/destroy_stage_0.png +0 -0
  139. data/textures/destroy_stage_1.png +0 -0
  140. data/textures/destroy_stage_2.png +0 -0
  141. data/textures/destroy_stage_3.png +0 -0
  142. data/textures/destroy_stage_4.png +0 -0
  143. data/textures/destroy_stage_5.png +0 -0
  144. data/textures/destroy_stage_6.png +0 -0
  145. data/textures/destroy_stage_7.png +0 -0
  146. data/textures/destroy_stage_8.png +0 -0
  147. data/textures/destroy_stage_9.png +0 -0
  148. data/textures/diamond_block.png +0 -0
  149. data/textures/diamond_ore.png +0 -0
  150. data/textures/dirt.png +0 -0
  151. data/textures/dirt_podzol_side.png +0 -0
  152. data/textures/dirt_podzol_top.png +0 -0
  153. data/textures/dispenser_front_horizontal.png +0 -0
  154. data/textures/dispenser_front_vertical.png +0 -0
  155. data/textures/door_acacia_lower.png +0 -0
  156. data/textures/door_acacia_upper.png +0 -0
  157. data/textures/door_birch_lower.png +0 -0
  158. data/textures/door_birch_upper.png +0 -0
  159. data/textures/door_dark_oak_lower.png +0 -0
  160. data/textures/door_dark_oak_upper.png +0 -0
  161. data/textures/door_iron_lower.png +0 -0
  162. data/textures/door_iron_upper.png +0 -0
  163. data/textures/door_jungle_lower.png +0 -0
  164. data/textures/door_jungle_upper.png +0 -0
  165. data/textures/door_spruce_lower.png +0 -0
  166. data/textures/door_spruce_upper.png +0 -0
  167. data/textures/door_wood_lower.png +0 -0
  168. data/textures/door_wood_upper.png +0 -0
  169. data/textures/double_plant_fern_bottom.png +0 -0
  170. data/textures/double_plant_fern_top.png +0 -0
  171. data/textures/double_plant_grass_bottom.png +0 -0
  172. data/textures/double_plant_grass_top.png +0 -0
  173. data/textures/double_plant_paeonia_bottom.png +0 -0
  174. data/textures/double_plant_paeonia_top.png +0 -0
  175. data/textures/double_plant_rose_bottom.png +0 -0
  176. data/textures/double_plant_rose_top.png +0 -0
  177. data/textures/double_plant_sunflower_back.png +0 -0
  178. data/textures/double_plant_sunflower_bottom.png +0 -0
  179. data/textures/double_plant_sunflower_front.png +0 -0
  180. data/textures/double_plant_sunflower_top.png +0 -0
  181. data/textures/double_plant_syringa_bottom.png +0 -0
  182. data/textures/double_plant_syringa_top.png +0 -0
  183. data/textures/dragon_egg.png +0 -0
  184. data/textures/dropper_front_horizontal.png +0 -0
  185. data/textures/dropper_front_vertical.png +0 -0
  186. data/textures/emerald_block.png +0 -0
  187. data/textures/emerald_ore.png +0 -0
  188. data/textures/enchanting_table_bottom.png +0 -0
  189. data/textures/enchanting_table_side.png +0 -0
  190. data/textures/enchanting_table_top.png +0 -0
  191. data/textures/end_stone.png +0 -0
  192. data/textures/endframe_eye.png +0 -0
  193. data/textures/endframe_side.png +0 -0
  194. data/textures/endframe_top.png +0 -0
  195. data/textures/farmland_dry.png +0 -0
  196. data/textures/farmland_wet.png +0 -0
  197. data/textures/fern.png +0 -0
  198. data/textures/fire_layer_0.png +0 -0
  199. data/textures/fire_layer_0.png.mcmeta +0 -38
  200. data/textures/fire_layer_1.png +0 -0
  201. data/textures/fire_layer_1.png.mcmeta +0 -3
  202. data/textures/flower_allium.png +0 -0
  203. data/textures/flower_blue_orchid.png +0 -0
  204. data/textures/flower_dandelion.png +0 -0
  205. data/textures/flower_houstonia.png +0 -0
  206. data/textures/flower_oxeye_daisy.png +0 -0
  207. data/textures/flower_paeonia.png +0 -0
  208. data/textures/flower_pot.png +0 -0
  209. data/textures/flower_rose.png +0 -0
  210. data/textures/flower_tulip_orange.png +0 -0
  211. data/textures/flower_tulip_pink.png +0 -0
  212. data/textures/flower_tulip_red.png +0 -0
  213. data/textures/flower_tulip_white.png +0 -0
  214. data/textures/furnace_front_off.png +0 -0
  215. data/textures/furnace_front_on.png +0 -0
  216. data/textures/furnace_side.png +0 -0
  217. data/textures/furnace_top.png +0 -0
  218. data/textures/glass.png +0 -0
  219. data/textures/glass_black.png +0 -0
  220. data/textures/glass_blue.png +0 -0
  221. data/textures/glass_brown.png +0 -0
  222. data/textures/glass_cyan.png +0 -0
  223. data/textures/glass_gray.png +0 -0
  224. data/textures/glass_green.png +0 -0
  225. data/textures/glass_light_blue.png +0 -0
  226. data/textures/glass_lime.png +0 -0
  227. data/textures/glass_magenta.png +0 -0
  228. data/textures/glass_orange.png +0 -0
  229. data/textures/glass_pane_top.png +0 -0
  230. data/textures/glass_pane_top_black.png +0 -0
  231. data/textures/glass_pane_top_blue.png +0 -0
  232. data/textures/glass_pane_top_brown.png +0 -0
  233. data/textures/glass_pane_top_cyan.png +0 -0
  234. data/textures/glass_pane_top_gray.png +0 -0
  235. data/textures/glass_pane_top_green.png +0 -0
  236. data/textures/glass_pane_top_light_blue.png +0 -0
  237. data/textures/glass_pane_top_lime.png +0 -0
  238. data/textures/glass_pane_top_magenta.png +0 -0
  239. data/textures/glass_pane_top_orange.png +0 -0
  240. data/textures/glass_pane_top_pink.png +0 -0
  241. data/textures/glass_pane_top_purple.png +0 -0
  242. data/textures/glass_pane_top_red.png +0 -0
  243. data/textures/glass_pane_top_silver.png +0 -0
  244. data/textures/glass_pane_top_white.png +0 -0
  245. data/textures/glass_pane_top_yellow.png +0 -0
  246. data/textures/glass_pink.png +0 -0
  247. data/textures/glass_purple.png +0 -0
  248. data/textures/glass_red.png +0 -0
  249. data/textures/glass_silver.png +0 -0
  250. data/textures/glass_white.png +0 -0
  251. data/textures/glass_yellow.png +0 -0
  252. data/textures/glowstone.png +0 -0
  253. data/textures/gold_block.png +0 -0
  254. data/textures/gold_ore.png +0 -0
  255. data/textures/grass_side.png +0 -0
  256. data/textures/grass_side_overlay.png +0 -0
  257. data/textures/grass_side_snowed.png +0 -0
  258. data/textures/grass_top.png +0 -0
  259. data/textures/gravel.png +0 -0
  260. data/textures/hardened_clay.png +0 -0
  261. data/textures/hardened_clay_stained_black.png +0 -0
  262. data/textures/hardened_clay_stained_blue.png +0 -0
  263. data/textures/hardened_clay_stained_brown.png +0 -0
  264. data/textures/hardened_clay_stained_cyan.png +0 -0
  265. data/textures/hardened_clay_stained_gray.png +0 -0
  266. data/textures/hardened_clay_stained_green.png +0 -0
  267. data/textures/hardened_clay_stained_light_blue.png +0 -0
  268. data/textures/hardened_clay_stained_lime.png +0 -0
  269. data/textures/hardened_clay_stained_magenta.png +0 -0
  270. data/textures/hardened_clay_stained_orange.png +0 -0
  271. data/textures/hardened_clay_stained_pink.png +0 -0
  272. data/textures/hardened_clay_stained_purple.png +0 -0
  273. data/textures/hardened_clay_stained_red.png +0 -0
  274. data/textures/hardened_clay_stained_silver.png +0 -0
  275. data/textures/hardened_clay_stained_white.png +0 -0
  276. data/textures/hardened_clay_stained_yellow.png +0 -0
  277. data/textures/hay_block_side.png +0 -0
  278. data/textures/hay_block_top.png +0 -0
  279. data/textures/hopper_inside.png +0 -0
  280. data/textures/hopper_outside.png +0 -0
  281. data/textures/hopper_top.png +0 -0
  282. data/textures/ice.png +0 -0
  283. data/textures/ice_packed.png +0 -0
  284. data/textures/iron_bars.png +0 -0
  285. data/textures/iron_block.png +0 -0
  286. data/textures/iron_ore.png +0 -0
  287. data/textures/iron_trapdoor.png +0 -0
  288. data/textures/itemframe_background.png +0 -0
  289. data/textures/jukebox_side.png +0 -0
  290. data/textures/jukebox_top.png +0 -0
  291. data/textures/ladder.png +0 -0
  292. data/textures/lapis_block.png +0 -0
  293. data/textures/lapis_ore.png +0 -0
  294. data/textures/lava_flow.png +0 -0
  295. data/textures/lava_flow.png.mcmeta +0 -5
  296. data/textures/lava_still.png +0 -0
  297. data/textures/lava_still.png.mcmeta +0 -45
  298. data/textures/leaves_acacia.png +0 -0
  299. data/textures/leaves_big_oak.png +0 -0
  300. data/textures/leaves_birch.png +0 -0
  301. data/textures/leaves_jungle.png +0 -0
  302. data/textures/leaves_oak.png +0 -0
  303. data/textures/leaves_spruce.png +0 -0
  304. data/textures/lever.png +0 -0
  305. data/textures/log_acacia.png +0 -0
  306. data/textures/log_acacia_top.png +0 -0
  307. data/textures/log_big_oak.png +0 -0
  308. data/textures/log_big_oak_top.png +0 -0
  309. data/textures/log_birch.png +0 -0
  310. data/textures/log_birch_top.png +0 -0
  311. data/textures/log_jungle.png +0 -0
  312. data/textures/log_jungle_top.png +0 -0
  313. data/textures/log_oak.png +0 -0
  314. data/textures/log_oak_top.png +0 -0
  315. data/textures/log_spruce.png +0 -0
  316. data/textures/log_spruce_top.png +0 -0
  317. data/textures/melon_side.png +0 -0
  318. data/textures/melon_stem_connected.png +0 -0
  319. data/textures/melon_stem_disconnected.png +0 -0
  320. data/textures/melon_top.png +0 -0
  321. data/textures/mob_spawner.png +0 -0
  322. data/textures/mushroom_block_inside.png +0 -0
  323. data/textures/mushroom_block_skin_brown.png +0 -0
  324. data/textures/mushroom_block_skin_red.png +0 -0
  325. data/textures/mushroom_block_skin_stem.png +0 -0
  326. data/textures/mushroom_brown.png +0 -0
  327. data/textures/mushroom_red.png +0 -0
  328. data/textures/mycelium_side.png +0 -0
  329. data/textures/mycelium_top.png +0 -0
  330. data/textures/nether_brick.png +0 -0
  331. data/textures/nether_wart_stage_0.png +0 -0
  332. data/textures/nether_wart_stage_1.png +0 -0
  333. data/textures/nether_wart_stage_2.png +0 -0
  334. data/textures/netherrack.png +0 -0
  335. data/textures/noteblock.png +0 -0
  336. data/textures/obsidian.png +0 -0
  337. data/textures/piston_bottom.png +0 -0
  338. data/textures/piston_inner.png +0 -0
  339. data/textures/piston_side.png +0 -0
  340. data/textures/piston_top_normal.png +0 -0
  341. data/textures/piston_top_sticky.png +0 -0
  342. data/textures/planks_acacia.png +0 -0
  343. data/textures/planks_big_oak.png +0 -0
  344. data/textures/planks_birch.png +0 -0
  345. data/textures/planks_jungle.png +0 -0
  346. data/textures/planks_oak.png +0 -0
  347. data/textures/planks_spruce.png +0 -0
  348. data/textures/portal.png +0 -0
  349. data/textures/portal.png.mcmeta +0 -3
  350. data/textures/potatoes_stage_0.png +0 -0
  351. data/textures/potatoes_stage_1.png +0 -0
  352. data/textures/potatoes_stage_2.png +0 -0
  353. data/textures/potatoes_stage_3.png +0 -0
  354. data/textures/prismarine_bricks.png +0 -0
  355. data/textures/prismarine_dark.png +0 -0
  356. data/textures/prismarine_rough.png +0 -0
  357. data/textures/prismarine_rough.png.mcmeta +0 -30
  358. data/textures/pumpkin_face_off.png +0 -0
  359. data/textures/pumpkin_face_on.png +0 -0
  360. data/textures/pumpkin_side.png +0 -0
  361. data/textures/pumpkin_stem_connected.png +0 -0
  362. data/textures/pumpkin_stem_disconnected.png +0 -0
  363. data/textures/pumpkin_top.png +0 -0
  364. data/textures/quartz_block_bottom.png +0 -0
  365. data/textures/quartz_block_chiseled.png +0 -0
  366. data/textures/quartz_block_chiseled_top.png +0 -0
  367. data/textures/quartz_block_lines.png +0 -0
  368. data/textures/quartz_block_lines_top.png +0 -0
  369. data/textures/quartz_block_side.png +0 -0
  370. data/textures/quartz_block_top.png +0 -0
  371. data/textures/quartz_ore.png +0 -0
  372. data/textures/rail_activator.png +0 -0
  373. data/textures/rail_activator_powered.png +0 -0
  374. data/textures/rail_detector.png +0 -0
  375. data/textures/rail_detector_powered.png +0 -0
  376. data/textures/rail_golden.png +0 -0
  377. data/textures/rail_golden_powered.png +0 -0
  378. data/textures/rail_normal.png +0 -0
  379. data/textures/rail_normal_turned.png +0 -0
  380. data/textures/red_sand.png +0 -0
  381. data/textures/red_sandstone_bottom.png +0 -0
  382. data/textures/red_sandstone_carved.png +0 -0
  383. data/textures/red_sandstone_normal.png +0 -0
  384. data/textures/red_sandstone_smooth.png +0 -0
  385. data/textures/red_sandstone_top.png +0 -0
  386. data/textures/redstone_block.png +0 -0
  387. data/textures/redstone_dust_cross.png +0 -0
  388. data/textures/redstone_dust_cross_overlay.png +0 -0
  389. data/textures/redstone_dust_line.png +0 -0
  390. data/textures/redstone_dust_line_overlay.png +0 -0
  391. data/textures/redstone_lamp_off.png +0 -0
  392. data/textures/redstone_lamp_on.png +0 -0
  393. data/textures/redstone_ore.png +0 -0
  394. data/textures/redstone_torch_off.png +0 -0
  395. data/textures/redstone_torch_on.png +0 -0
  396. data/textures/reeds.png +0 -0
  397. data/textures/repeater_off.png +0 -0
  398. data/textures/repeater_on.png +0 -0
  399. data/textures/sand.png +0 -0
  400. data/textures/sandstone_bottom.png +0 -0
  401. data/textures/sandstone_carved.png +0 -0
  402. data/textures/sandstone_normal.png +0 -0
  403. data/textures/sandstone_smooth.png +0 -0
  404. data/textures/sandstone_top.png +0 -0
  405. data/textures/sapling_acacia.png +0 -0
  406. data/textures/sapling_birch.png +0 -0
  407. data/textures/sapling_jungle.png +0 -0
  408. data/textures/sapling_oak.png +0 -0
  409. data/textures/sapling_roofed_oak.png +0 -0
  410. data/textures/sapling_spruce.png +0 -0
  411. data/textures/sea_lantern.png +0 -0
  412. data/textures/sea_lantern.png.mcmeta +0 -5
  413. data/textures/slime.png +0 -0
  414. data/textures/snow.png +0 -0
  415. data/textures/soul_sand.png +0 -0
  416. data/textures/sponge.png +0 -0
  417. data/textures/sponge_wet.png +0 -0
  418. data/textures/stone.png +0 -0
  419. data/textures/stone_andesite.png +0 -0
  420. data/textures/stone_andesite_smooth.png +0 -0
  421. data/textures/stone_diorite.png +0 -0
  422. data/textures/stone_diorite_smooth.png +0 -0
  423. data/textures/stone_granite.png +0 -0
  424. data/textures/stone_granite_smooth.png +0 -0
  425. data/textures/stone_slab_side.png +0 -0
  426. data/textures/stone_slab_top.png +0 -0
  427. data/textures/stonebrick.png +0 -0
  428. data/textures/stonebrick_carved.png +0 -0
  429. data/textures/stonebrick_cracked.png +0 -0
  430. data/textures/stonebrick_mossy.png +0 -0
  431. data/textures/tallgrass.png +0 -0
  432. data/textures/tnt_bottom.png +0 -0
  433. data/textures/tnt_side.png +0 -0
  434. data/textures/tnt_top.png +0 -0
  435. data/textures/torch_on.png +0 -0
  436. data/textures/trapdoor.png +0 -0
  437. data/textures/trip_wire.png +0 -0
  438. data/textures/trip_wire_source.png +0 -0
  439. data/textures/vine.png +0 -0
  440. data/textures/water_flow.png +0 -0
  441. data/textures/water_flow.png.mcmeta +0 -3
  442. data/textures/water_still.png +0 -0
  443. data/textures/water_still.png.mcmeta +0 -5
  444. data/textures/waterlily.png +0 -0
  445. data/textures/web.png +0 -0
  446. data/textures/wheat_stage_0.png +0 -0
  447. data/textures/wheat_stage_1.png +0 -0
  448. data/textures/wheat_stage_2.png +0 -0
  449. data/textures/wheat_stage_3.png +0 -0
  450. data/textures/wheat_stage_4.png +0 -0
  451. data/textures/wheat_stage_5.png +0 -0
  452. data/textures/wheat_stage_6.png +0 -0
  453. data/textures/wheat_stage_7.png +0 -0
  454. data/textures/wool_colored_black.png +0 -0
  455. data/textures/wool_colored_blue.png +0 -0
  456. data/textures/wool_colored_brown.png +0 -0
  457. data/textures/wool_colored_cyan.png +0 -0
  458. data/textures/wool_colored_gray.png +0 -0
  459. data/textures/wool_colored_green.png +0 -0
  460. data/textures/wool_colored_light_blue.png +0 -0
  461. data/textures/wool_colored_lime.png +0 -0
  462. data/textures/wool_colored_magenta.png +0 -0
  463. data/textures/wool_colored_orange.png +0 -0
  464. data/textures/wool_colored_pink.png +0 -0
  465. data/textures/wool_colored_purple.png +0 -0
  466. data/textures/wool_colored_red.png +0 -0
  467. data/textures/wool_colored_silver.png +0 -0
  468. data/textures/wool_colored_white.png +0 -0
  469. data/textures/wool_colored_yellow.png +0 -0
  470. data/textures.zip +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 29209338abdd7386e898607c46898dd765a38b38
4
- data.tar.gz: 0eb73d7e9430fc8409baafcb98439dd5bfd911b8
3
+ metadata.gz: 144001b6a79d4c4e769f79d4945856ba6378316d
4
+ data.tar.gz: fa4e456ade60eadeaafa495078341cad8c1dba22
5
5
  SHA512:
6
- metadata.gz: 732f0c6f2af76cdfd3623d659610a5d700c1a48d9fcd455306b69eac12256f9e4eda5729fe48ff5a070e298b8a5c8ef7b0bcffad774a22bb441c81bddbe68ccc
7
- data.tar.gz: b926da55c0212274c490f0a932e8292f54eacc1381dcc57158d117a30f2e596f5b1bbd1018fa04ca13e0dad3ed139d7a217bb94ca33211f028ebb7c872fa23ca
6
+ metadata.gz: de51d06a5c62a7dda4b4c086bbefb0ed1eb88aa08575e31d44e13129c6cdf309825f8ff167278c951952e17d071ccdc7ed30d57d37ac8a7851e7f1a74ab9cc19
7
+ data.tar.gz: fdc48d92deb4ab917cdbb8ebc71d1f5535424e87c3ca4d2f9595f62618ee5d9319aa3e1e0aec6470d64b8f6439ee3cff3ada893a2cd61279a3014f14bd2b8568
data/.gitignore CHANGED
@@ -10,7 +10,7 @@
10
10
  /test/tmp/
11
11
  /test/version_tmp/
12
12
  /tmp/
13
-
13
+ /lib/mc_dot_art_maker/textures/
14
14
 
15
15
 
16
16
 
data/Rakefile CHANGED
@@ -1,6 +1,13 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require 'rake/testtask'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
7
  task :default => :spec
8
+
9
+ Rake::TestTask.new do |t|
10
+ t.libs << "test"
11
+ t.test_files = FileList['test/test*.rb']
12
+ t.verbose = true
13
+ end
@@ -21,21 +21,18 @@ module MCDotArtMaker
21
21
  @texture
22
22
  end
23
23
  end
24
- # def to_lab
25
- # @color.to_lab
26
- # end
24
+
27
25
  def to_rmagic_color
28
- # p "calc color :#{@color.r} #{@color.g} #{@color.b}"
29
26
  Magick::Pixel.new(@color.r*257, @color.g*257, @color.b*257)
30
27
  end
31
28
 
32
29
  def hash
33
30
  code = 17
34
- code = 37*code + @name.hash
35
- code = 37*code + @id.hash
36
- code = 37*code + @data.hash
37
- code = 37*code + @texture.hash
38
- code = 37*code + @color.hash
31
+ code = 37 * code + @name.hash
32
+ code = 37 * code + @id.hash
33
+ code = 37 * code + @data.hash
34
+ code = 37 * code + @texture.hash
35
+ code = 37 * code + @color.hash
39
36
  code
40
37
  end
41
38
  def eql?(other)
@@ -471,8 +471,8 @@ module MCDotArtMaker
471
471
  MCDotArtMaker.puts "Block #{name} registered: #{color}"
472
472
  end
473
473
 
474
- def calc_average_color(arg)
475
- pixels = arg.get_pixels(0,0,arg.columns,arg.rows)
474
+ def calc_average_color(image)
475
+ pixels = image.get_pixels(0,0,image.columns,image.rows)
476
476
 
477
477
  sum_r = pixels.reduce(0) do |a,elem|
478
478
  a+elem.red/257
@@ -1,30 +1,63 @@
1
1
  module MCDotArtMaker
2
+ class InternalError < StandardError; end
2
3
  class Dot
3
- attr_reader :color
4
+ attr_reader :color, :x, :y
4
5
  attr_accessor :block
5
- def initialize(image,x,y)
6
- pixel = image.pixel_color(x,y)
7
- r = pixel.red / 257
8
- g = pixel.green / 257
9
- b = pixel.blue / 257
10
- @color = Color::RGB.new(r, g, b)
6
+
7
+ def initialize(color, x, y)
8
+ @color = color
9
+ @x = x
10
+ @y = y
11
11
  end
12
- # def set_color(r,g,b)
13
- # @color = Color::RGB.new(r, g, b)
14
- # # p "set color #{r} #{g} #{b}"
15
- # end
16
- # def to_lab
17
- # @color.to_lab
18
- # end
12
+
19
13
  def to_rmagic_color
20
14
  # p "calc color :#{@color.r} #{@color.g} #{@color.b}"
21
15
  Magick::Pixel.new(@color.r*257, @color.g*257, @color.b*257)
22
16
  end
23
- def comparitor
24
- Color::Comparison.new(@color)
17
+
18
+ # def determine_block(block_list)
19
+ def determine_block
20
+ # comparitor = self.comparitor
21
+ # block_distance_list = {}
22
+ # block_list.each do |block|
23
+ # block_distance_list[block] = comparitor.compare(block.color)
24
+ # end
25
+ # nearest_block = block_distance_list.min{ |x, y| x[1] <=> y[1] }[0] #[0]: key [1]: value
26
+ #
27
+ # self.block = nearest_block
28
+ # nearest_block
29
+
30
+
31
+ # clocest_block = block_list.select{ |block|
32
+ # comparitor.compare(block.color) == 0
33
+ # }.first
34
+ # raise(InternalError, "An error occured while determine clocest block...") if clocest_block.nil?
35
+ #
36
+ # @block = clocest_block
37
+
38
+
39
+ @block = self.class.color_block_table[@color]
25
40
  end
26
- # def image=(other)
27
- # @image = other.resize(16,16)
41
+
42
+ private
43
+ # def comparitor
44
+ # @comparitor || begin
45
+ # @comparitor = Color::Comparison.new(@color)
46
+ # end
28
47
  # end
48
+
49
+ class << self
50
+ def set_color_palette(cp)
51
+ @block_list = cp
52
+
53
+ @color_block_table = @block_list.reduce({}) do |hash, block|
54
+ hash.store(block.color,block)
55
+ hash
56
+ end
57
+ end
58
+ def color_block_table
59
+ @color_block_table
60
+ end
61
+ end
29
62
  end
30
63
  end
@@ -1,6 +1,17 @@
1
1
  #
2
2
  # Add some features to extern gem.
3
3
  #
4
+ module Magick
5
+ class Image
6
+ def get_color_rgb_at(x, y)
7
+ pixel = self.pixel_color(x,y)
8
+ r = pixel.red / 257
9
+ g = pixel.green / 257
10
+ b = pixel.blue / 257
11
+ ::Color::RGB.new(r, g, b)
12
+ end
13
+ end
14
+ end
4
15
 
5
16
  module Color
6
17
  class RGB
@@ -1,105 +1,74 @@
1
1
  module MCDotArtMaker
2
+ class CannotModifyImageError < StandardError; end
3
+
2
4
  class Maker
3
- attr_reader :width, :height, :cells, :image
4
- # include Enumerable
5
-
6
- def initialize(filename,dither_method = RiemersmaDitherMethod)
7
- # モザイクにしたい元画像をセット
8
- if filename.instance_of? String
9
- @image = Magick::ImageList.new(filename).first
10
- elsif filename.instance_of? Magick::Image
11
- @image = filename
12
- end
5
+ attr_reader :width, :height, :dots, :image
6
+
7
+ def initialize(filename_or_image,dither_method = RiemersmaDitherMethod)
8
+ @image =
9
+ case filename_or_image
10
+ when String
11
+ Magick::ImageList.new(filename_or_image).first
12
+ when Magick::Image
13
+ filename_or_image
14
+ end
13
15
  @dither_method = dither_method
14
16
 
15
- @schematic_helper = MCDotArtMaker::SchematicHelper.instance
16
- @schematic_helper.read File.expand_path('../seed.schematic', __FILE__)
17
+ @schematic_helper = MCDotArtMaker::SchematicHelper.new
18
+ @schematic_helper.read(File.expand_path('../seed.schematic', __FILE__))
17
19
  @block_list = MCDotArtMaker::BlockList.instance
18
20
 
19
21
  @calculation_count = 0 # 近似ブロック計算が終わったらインクリメント
20
- end
21
- def resize_to_fit(width, height)
22
- @image = @image.resize_to_fit(width, height)
22
+ @is_locked = false
23
23
 
24
- # reset
25
- @cells = nil
24
+ MCDotArtMaker::Dot.set_color_palette(@block_list)
26
25
  end
27
- def [](row,col)
28
- load_image unless image_loaded?
29
- @cells[row*@width + col]
30
- end
31
- def []=(row,col,newValue)
32
- load_image unless image_loaded?
33
- @cells[row*@width + col] = newValue
34
- end
35
- def each(size = 1)
36
- load_image unless image_loaded?
37
- @cells.each_with_index do |c,i|
38
- x = (i % @width) * size #列番号・横方向: x
39
- y = (i/@width) * size #行番号・縦方向: y
40
- yield c,x,y
41
- # cell,cellの左上のx座標 ,cellの左上のy座標
42
- end
43
- end
44
- def each_with_index(size = 1)
45
- load_image unless image_loaded?
46
- @cells.each_with_index do |c,i|
47
- x = (i % @width) * size #列番号・横方向: x
48
- y = (i/@width) * size #行番号・縦方向: y
49
- yield c,i,x,y
50
- # cell,cellの左上のx座標 ,cellの左上のy座標
51
- end
52
- end
53
- def block_ids
54
- load_image unless image_loaded?
55
- tmp = []
56
- each do |c|
57
- tmp << c.block.id
58
- end
59
- tmp
26
+ # def resize_to_fit(width, height)
27
+ # check_not_locked
28
+ # # @image = @image.resize_to_fit(width, height)
29
+ # @image.resize_to_fit!(width, height)
30
+ # end
31
+
32
+ def manipulate
33
+ check_not_locked
34
+ image = yield @image
35
+ raise(ArgumentError,"Should return Magick::Image object") unless image.class == Magick::Image
36
+ @image = image
60
37
  end
61
- def block_data
62
- load_image unless image_loaded?
63
- tmp = []
64
- each do |c|
65
- tmp << c.block.data
66
- end
67
- tmp
38
+
39
+ def calculate
40
+ # load_image unless image_loaded?
41
+ load_image unless image_locked?
42
+ calc_nearest_block unless calculation_done?
43
+ lock_image
68
44
  end
45
+
69
46
  def mosaic_image(size = 1)
70
47
  # モザイク化した画像を返す
71
- calculate
48
+ # calculate
72
49
 
73
50
  new_image = Magick::Image.new(@width*size, @height*size){ self.background_color = "white" }
74
- each(size) do |c,x,y|
51
+
52
+ @dots.each do |c|
75
53
  idr = Magick::Draw.new
76
54
  idr.fill = c.block.to_rmagic_color
77
- idr.rectangle(x, y, x + size, y + size)
55
+ idr.rectangle(c.x, c.y, c.x + size, c.y + size)
78
56
  idr.draw(new_image)
79
57
  end
80
58
  new_image
81
59
  end
82
- def calculate
83
- load_image unless image_loaded?
84
- calc_nearest_block unless calculation_done?
85
- end
86
- def reset
87
- load_image
88
- end
89
-
90
60
  def texture_image(size = TEXTURE_SIZE)
91
61
  # 近似ブロック色でのモザイク画像を返す
92
- calculate
62
+ # calculate
93
63
 
94
64
  new_image = Magick::Image.new(@width*size, @height*size){ self.background_color = "white" }
95
- each(size) do |c,x,y|
96
- new_image.composite!(c.block.texture(size), x, y, Magick::OverCompositeOp)
65
+ @dots.each do |c|
66
+ new_image.composite!(c.block.texture(size), c.x*size, c.y*size, Magick::OverCompositeOp)
97
67
  end
98
68
  new_image
99
69
  end
100
-
101
70
  def write_schematic(filename)
102
- calculate
71
+ # calculate
103
72
 
104
73
  @schematic_helper.blocks = block_ids
105
74
  @schematic_helper.data = block_data
@@ -117,31 +86,35 @@ module MCDotArtMaker
117
86
 
118
87
  private
119
88
  def calc_nearest_block
89
+ # MCDotArtMaker.puts "Calc nearest block...."
90
+ # @nearest_color_cache ||= {}
91
+ #
92
+ # @dots.each_with_index do |cell,index|
93
+ # puts "Calculating #{index+1} of #{@dots.size}" if ((index+1) % 10000 == 0)|| (index+1 == @dots.size)
94
+ # if @nearest_color_cache.include?(cell.color)
95
+ # cell.block = @nearest_color_cache[cell.color]
96
+ # else
97
+ # @nearest_color_cache[cell.color] = cell.determine_block(@block_list)
98
+ #
99
+ # MCDotArtMaker.puts "Cashed new color #{@nearest_color_cache.size} of #{@block_list.size}"
100
+ # end
101
+ # @calculation_count += 1
102
+ # end
103
+ # MCDotArtMaker.puts "Done!"
104
+
105
+
106
+
120
107
  MCDotArtMaker.puts "Calc nearest block...."
121
- @nearest_color_cash ||= {}
122
-
123
- each_with_index do |cell,index|
124
- puts "Calculating #{index+1} of #{@cells.size}" if ((index+1) % 10000 == 0)|| (index+1 == @cells.size)
125
- if @nearest_color_cash.include?(cell.color)
126
- cell.block = @nearest_color_cash[cell.color]
127
- else
128
- comparitor = cell.comparitor
129
- block_distance_list = {}
130
- @block_list.each do |block|
131
- block_distance_list[block] = comparitor.compare(block.color)
132
- end
133
- nearest_block = block_distance_list.min{ |x, y| x[1] <=> y[1] }[0] #[0]: key [1]: value
134
- @nearest_color_cash[cell.color] = nearest_block
135
- cell.block = nearest_block
136
108
 
137
- MCDotArtMaker.puts "Cashed new color #{@nearest_color_cash.size} of #{@block_list.size}"
138
- end
109
+ @dots.each_with_index do |dot,index|
110
+ puts "Calculating #{index+1} of #{@dots.size}" if ((index+1) % 10000 == 0)|| (index+1 == @dots.size)
111
+ dot.determine_block
139
112
  @calculation_count += 1
140
113
  end
141
114
  MCDotArtMaker.puts "Done!"
142
115
  end
143
116
  def calculation_done?
144
- @cells.size == @calculation_count
117
+ @dots.size == @calculation_count
145
118
  end
146
119
  def load_image
147
120
  # - width - 絵の横方向の大きさ
@@ -149,26 +122,74 @@ module MCDotArtMaker
149
122
  # 端っこは切り捨てる
150
123
  @width = @image.columns
151
124
  @height = @image.rows
152
- @cells = []
125
+ @dots = []
153
126
 
154
127
 
155
128
  MCDotArtMaker.puts "remapping..."
156
129
  @image = @image.remap(@block_list.color_palette,@dither_method)
157
130
  MCDotArtMaker.puts "Done!"
158
131
 
159
- MCDotArtMaker.puts "Registering cells..."
132
+ MCDotArtMaker.puts "Registering dots..."
160
133
  (@width*@height).times do |i|
161
134
  x = i % @width #列番号・横方向: x
162
135
  y = i / @width #行番号・縦方向: y
163
- # @cells << Cell.new(@image,x,y)
164
- @cells << Dot.new(@image,x,y)
136
+ @dots << Dot.new(@image.get_color_rgb_at(x,y),x,y)
165
137
  end
166
138
  MCDotArtMaker.puts "Done!"
167
139
 
168
140
  @calculation_count = 0
169
141
  end
170
- def image_loaded?
171
- !@cells.nil?
142
+ # def image_loaded?
143
+ # !@dots.nil?
144
+ # end
145
+
146
+ def block_ids
147
+ # calculate
148
+
149
+ @dots.reduce([]) do |list, cell|
150
+ list << cell.block.id
151
+ end
152
+ end
153
+ def block_data
154
+ # calculate
155
+
156
+ @dots.reduce([]) do |list, cell|
157
+ list << cell.block.data
158
+ end
159
+ end
160
+ def check_not_locked
161
+ raise(CannotModifyImageError,"You cannot modifiy the image after calculation.") if @is_locked
162
+ end
163
+ def lock_image
164
+ @is_locked = true
165
+ end
166
+ def image_locked?
167
+ @is_locked
168
+ end
169
+
170
+ class << self
171
+ def calculate_before(*_methods)
172
+ methods = Array(_methods)
173
+ methods.each do |method|
174
+ alias_method("#{method}_without_calculation",method)
175
+ define_method(method) do |*args|
176
+ calculate
177
+ self.send("#{method}_without_calculation",*args)
178
+ end
179
+ end
180
+ end
181
+
182
+ def generate_rmagick_delegation_methods(*_methods)
183
+ methods = Array(_methods)
184
+ methods.each do |method|
185
+ define_method(method) do |*args|
186
+ check_not_locked
187
+ @image.send("#{method}!",*args)
188
+ end
189
+ end
190
+ end
172
191
  end
192
+ calculate_before :mosaic_image, :texture_image, :write_schematic, :block_ids, :block_data
193
+ generate_rmagick_delegation_methods :resize_to_fit, :resize_to_fill
173
194
  end
174
195
  end
@@ -4,7 +4,7 @@ module MCDotArtMaker
4
4
  #= .schematicを処理するためのクラス
5
5
  # nbt_utilsをラップして書き込み機能を追加する
6
6
  class SchematicHelper
7
- include Singleton
7
+ # include Singleton
8
8
  attr_reader :blocks,:data
9
9
  attr_reader :weOffsetX,:weOffsetY,:weOffsetZ
10
10
  attr_reader :weOriginX,:weOriginY,:weOriginZ
@@ -7,7 +7,7 @@ module MCDotArtMaker
7
7
  class TextureLoader
8
8
  TEXTURE_DIR = File.join(File.dirname(__FILE__),"textures")
9
9
  TEXTURE_TMP_DIR = File.join(TEXTURE_DIR,"tmp")
10
-
10
+
11
11
  def initialize(jar = nil)
12
12
  @jar = jar || jars.last
13
13
  end
@@ -32,13 +32,6 @@ module MCDotArtMaker
32
32
 
33
33
  Zip::File.open(jar_file_path) do |zip|
34
34
  zip.each do |entry|
35
- # puts "entry #{entry.to_s}"
36
-
37
- # if md = /\Aassets\/minecraft\/textures\/blocks\/(.*).png\Z/.match(entry.to_s)
38
- # # p md[1]
39
- # entry.extract(File.join("textures", md[1]) + ".png")
40
- # end
41
-
42
35
  if md = /\Aassets\/minecraft\/textures\/blocks\/#{filename}\Z/.match(entry.to_s)
43
36
  entry.extract(File.join(TEXTURE_DIR, filename))
44
37
  return Magick::ImageList.new(File.join(TEXTURE_DIR,filename)).first
@@ -61,7 +54,7 @@ module MCDotArtMaker
61
54
  end
62
55
 
63
56
 
64
- # private
57
+ private
65
58
  def os
66
59
  @os ||= (
67
60
  host_os = RbConfig::CONFIG['host_os']
@@ -1,32 +1,32 @@
1
1
  module MCDotArtMaker
2
- def self.calc_average_color(arg)
3
- pixels = nil
4
- if arg.instance_of? Magick::Image or arg.instance_of? Magick::ImageList
5
- pixels = arg.get_pixels(0,0,arg.columns,arg.rows)
6
- elsif arg.instance_of? Array
7
- pixels = arg
8
- end
9
-
10
- if pixels.size == 1
11
- return pixels[0].red/257, pixels[0].green/257, pixels[0].blue/257
12
- end
13
- sum_r = pixels.reduce(0) do |a,elem|
14
- a+elem.red/257
15
- end
16
- ave_r = sum_r/pixels.size
17
-
18
- sum_g = pixels.reduce(0) do |a,elem|
19
- a+elem.green/257
20
- end
21
- ave_g = sum_g/pixels.size
22
-
23
- sum_b = pixels.reduce(0) do |a,elem|
24
- a+elem.blue/257
25
- end
26
- ave_b = sum_b/pixels.size
27
-
28
- [ave_r, ave_g, ave_b]
29
- end
2
+ # def self.calc_average_color(arg)
3
+ # pixels = nil
4
+ # if arg.instance_of? Magick::Image or arg.instance_of? Magick::ImageList
5
+ # pixels = arg.get_pixels(0,0,arg.columns,arg.rows)
6
+ # elsif arg.instance_of? Array
7
+ # pixels = arg
8
+ # end
9
+ #
10
+ # if pixels.size == 1
11
+ # return pixels[0].red/257, pixels[0].green/257, pixels[0].blue/257
12
+ # end
13
+ # sum_r = pixels.reduce(0) do |a,elem|
14
+ # a+elem.red/257
15
+ # end
16
+ # ave_r = sum_r/pixels.size
17
+ #
18
+ # sum_g = pixels.reduce(0) do |a,elem|
19
+ # a+elem.green/257
20
+ # end
21
+ # ave_g = sum_g/pixels.size
22
+ #
23
+ # sum_b = pixels.reduce(0) do |a,elem|
24
+ # a+elem.blue/257
25
+ # end
26
+ # ave_b = sum_b/pixels.size
27
+ #
28
+ # [ave_r, ave_g, ave_b]
29
+ # end
30
30
 
31
31
  def self.puts(*args)
32
32
  Kernel.puts *args if DEBUG
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'mc_dot_art_maker'
3
- s.version = '0.3.3'
3
+ s.version = '0.4.0'
4
4
  s.licenses = ['MIT']
5
5
  s.summary = 'Dot Art Maker for Minecraft'
6
6
  s.description = 'Converting images to mosaic arts using Minecraft textures and .schematic files.'
Binary file
@@ -24,4 +24,12 @@ class BlockListTest < Test::Unit::TestCase
24
24
  assert_equal(16, block.texture.columns)
25
25
  end
26
26
  end
27
+
28
+ def test_color_palette
29
+ @block_list.color_palette.write("test/images/tmp/palette.png")
30
+
31
+ assert_equal(Magick::Image, @block_list.color_palette.class)
32
+ assert_equal(Digest::MD5.file("test/images/sample/palette.png"),
33
+ Digest::MD5.file("test/images/tmp/palette.png"))
34
+ end
27
35
  end
@@ -4,7 +4,7 @@ require "digest/md5"
4
4
 
5
5
 
6
6
  class BlockPaletteTest < Test::Unit::TestCase
7
- TMP_DIR = "images/tmp"
7
+ TMP_DIR = "test/images/tmp"
8
8
  METHODS = [MCDotArtMaker::NoDitherMethod,MCDotArtMaker::RiemersmaDitherMethod,MCDotArtMaker::FloydSteinbergDitherMethod]
9
9
 
10
10
  class << self
@@ -15,15 +15,15 @@ class BlockPaletteTest < Test::Unit::TestCase
15
15
  end
16
16
  def setup
17
17
  METHODS.each do |m|
18
- maker = MCDotArtMaker::Maker.new("images/src/test_image.jpg",m)
19
- maker.texture_image.write "images/tmp/dither_methods_#{m}.png"
18
+ maker = MCDotArtMaker::Maker.new("test/images/src/test_image.jpg",m)
19
+ maker.texture_image.write "test/images/tmp/dither_methods_#{m}.png"
20
20
  end
21
21
  end
22
22
 
23
23
  def test_dither_methods
24
24
  METHODS.each do |m|
25
- assert_equal(Digest::MD5.file("images/sample/dither_methods_#{m}.png"),
26
- Digest::MD5.file("images/tmp/dither_methods_#{m}.png"))
25
+ assert_equal(Digest::MD5.file("test/images/sample/dither_methods_#{m}.png"),
26
+ Digest::MD5.file("test/images/tmp/dither_methods_#{m}.png"))
27
27
  end
28
28
  end
29
29
  end
data/test/test_dot.rb ADDED
@@ -0,0 +1,44 @@
1
+ require_relative '../lib/mc_dot_art_maker'
2
+ require 'test/unit'
3
+
4
+ class DotTest < Test::Unit::TestCase
5
+ def setup
6
+ @block_list = MCDotArtMaker::BlockList.instance
7
+ MCDotArtMaker::Dot.set_color_palette(@block_list)
8
+ end
9
+
10
+ def test_determine_block
11
+ dots = []
12
+ dots << MCDotArtMaker::Dot.new(Color::RGB.new(221, 221, 221),0,0)
13
+ dots << MCDotArtMaker::Dot.new(Color::RGB.new(231, 228, 219),0,0)
14
+ dots << MCDotArtMaker::Dot.new(Color::RGB.new(231, 228, 219),0,0)
15
+ dots << MCDotArtMaker::Dot.new(Color::RGB.new(114, 119, 106),0,0)
16
+ dots << MCDotArtMaker::Dot.new(Color::RGB.new(249, 236, 78),0,0)
17
+
18
+ expected_blocks =[]
19
+ expected_blocks << :white_wool
20
+ expected_blocks << :chiseled_quartz_block
21
+ expected_blocks << :chiseled_quartz_block
22
+ expected_blocks << :mossy_stone_bricks
23
+ expected_blocks << :gold_block
24
+ # blocks = dots.map do |dot|
25
+ # dot.determine_block
26
+ # end
27
+ blocks = dots.map(&:determine_block)
28
+
29
+ blocks.each do |block|
30
+ assert_equal(MCDotArtMaker::Block, block.class)
31
+ end
32
+
33
+ blocks.zip(expected_blocks) do |block, expectation|
34
+ assert_equal(expectation, block.name)
35
+ end
36
+ end
37
+
38
+ def test_determin_block_for_all_colors
39
+ @block_list.each do |block|
40
+ dot = MCDotArtMaker::Dot.new(block.color,0,0)
41
+ assert_equal(MCDotArtMaker::Block, dot.determine_block.class)
42
+ end
43
+ end
44
+ end