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.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/Rakefile +7 -0
- data/lib/mc_dot_art_maker/block.rb +6 -9
- data/lib/mc_dot_art_maker/block_list.rb +2 -2
- data/lib/mc_dot_art_maker/dot.rb +51 -18
- data/lib/mc_dot_art_maker/extern_lib_extension.rb +11 -0
- data/lib/mc_dot_art_maker/maker.rb +118 -97
- data/lib/mc_dot_art_maker/schematic_helper.rb +1 -1
- data/lib/mc_dot_art_maker/texture_loader.rb +2 -9
- data/lib/mc_dot_art_maker/utils.rb +28 -28
- data/mc_dot_art_maker.gemspec +1 -1
- data/test/images/src/test_image_cat.jpg +0 -0
- data/test/images/tmp/normal_conversion_mosaic.png +0 -0
- data/test/images/tmp/normal_conversion_mosaic_with_magick__image.png +0 -0
- data/test/images/tmp/normal_conversion_schematic.schematic +0 -0
- data/test/images/tmp/{dither_methods_RiemersmaDitherMethod.png → normal_conversion_texture.png} +0 -0
- data/test/images/tmp/normal_conversion_texture_with_magick__image.png +0 -0
- data/test/test_block_list.rb +8 -0
- data/test/test_dither_method.rb +5 -5
- data/test/test_dot.rb +44 -0
- data/test/test_maker.rb +74 -0
- data/test/test_normal_conversion.rb +67 -14
- data/test/test_texture_loader.rb +9 -1
- metadata +10 -448
- data/lib/mc_dot_art_maker/textures/brick.png +0 -0
- data/lib/mc_dot_art_maker/textures/clay.png +0 -0
- data/lib/mc_dot_art_maker/textures/coal_block.png +0 -0
- data/lib/mc_dot_art_maker/textures/diamond_block.png +0 -0
- data/lib/mc_dot_art_maker/textures/emerald_block.png +0 -0
- data/lib/mc_dot_art_maker/textures/glowstone.png +0 -0
- data/lib/mc_dot_art_maker/textures/gold_block.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_black.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_blue.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_brown.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_cyan.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_gray.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_green.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_light_blue.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_lime.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_magenta.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_orange.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_pink.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_purple.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_red.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_silver.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_white.png +0 -0
- data/lib/mc_dot_art_maker/textures/hardened_clay_stained_yellow.png +0 -0
- data/lib/mc_dot_art_maker/textures/hay_block_top.png +0 -0
- data/lib/mc_dot_art_maker/textures/ice.png +0 -0
- data/lib/mc_dot_art_maker/textures/iron_block.png +0 -0
- data/lib/mc_dot_art_maker/textures/lapis_block.png +0 -0
- data/lib/mc_dot_art_maker/textures/melon_top.png +0 -0
- data/lib/mc_dot_art_maker/textures/nether_brick.png +0 -0
- data/lib/mc_dot_art_maker/textures/obsidian.png +0 -0
- data/lib/mc_dot_art_maker/textures/planks_birch.png +0 -0
- data/lib/mc_dot_art_maker/textures/planks_jungle.png +0 -0
- data/lib/mc_dot_art_maker/textures/planks_oak.png +0 -0
- data/lib/mc_dot_art_maker/textures/planks_spruce.png +0 -0
- data/lib/mc_dot_art_maker/textures/quartz_block_chiseled_top.png +0 -0
- data/lib/mc_dot_art_maker/textures/redstone_block.png +0 -0
- data/lib/mc_dot_art_maker/textures/sandstone_top.png +0 -0
- data/lib/mc_dot_art_maker/textures/soul_sand.png +0 -0
- data/lib/mc_dot_art_maker/textures/sponge.png +0 -0
- data/lib/mc_dot_art_maker/textures/stonebrick_carved.png +0 -0
- data/lib/mc_dot_art_maker/textures/stonebrick_mossy.png +0 -0
- data/lib/mc_dot_art_maker/textures/tmp/1.9.jar +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_black.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_blue.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_brown.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_cyan.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_gray.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_green.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_light_blue.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_lime.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_magenta.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_orange.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_pink.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_purple.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_red.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_silver.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_white.png +0 -0
- data/lib/mc_dot_art_maker/textures/wool_colored_yellow.png +0 -0
- data/test/images/tmp/dither_methods_FloydSteinbergDitherMethod.png +0 -0
- data/test/images/tmp/dither_methods_NoDitherMethod.png +0 -0
- data/test/test_block_palette.rb +0 -29
- data/textures/anvil_base.png +0 -0
- data/textures/anvil_top_damaged_0.png +0 -0
- data/textures/anvil_top_damaged_1.png +0 -0
- data/textures/anvil_top_damaged_2.png +0 -0
- data/textures/beacon.png +0 -0
- data/textures/bed_feet_end.png +0 -0
- data/textures/bed_feet_side.png +0 -0
- data/textures/bed_feet_top.png +0 -0
- data/textures/bed_head_end.png +0 -0
- data/textures/bed_head_side.png +0 -0
- data/textures/bed_head_top.png +0 -0
- data/textures/bedrock.png +0 -0
- data/textures/bookshelf.png +0 -0
- data/textures/brewing_stand.png +0 -0
- data/textures/brewing_stand_base.png +0 -0
- data/textures/brick.png +0 -0
- data/textures/cactus_bottom.png +0 -0
- data/textures/cactus_side.png +0 -0
- data/textures/cactus_top.png +0 -0
- data/textures/cake_bottom.png +0 -0
- data/textures/cake_inner.png +0 -0
- data/textures/cake_side.png +0 -0
- data/textures/cake_top.png +0 -0
- data/textures/carrots_stage_0.png +0 -0
- data/textures/carrots_stage_1.png +0 -0
- data/textures/carrots_stage_2.png +0 -0
- data/textures/carrots_stage_3.png +0 -0
- data/textures/cauldron_bottom.png +0 -0
- data/textures/cauldron_inner.png +0 -0
- data/textures/cauldron_side.png +0 -0
- data/textures/cauldron_top.png +0 -0
- data/textures/clay.png +0 -0
- data/textures/coal_block.png +0 -0
- data/textures/coal_ore.png +0 -0
- data/textures/coarse_dirt.png +0 -0
- data/textures/cobblestone.png +0 -0
- data/textures/cobblestone_mossy.png +0 -0
- data/textures/cocoa_stage_0.png +0 -0
- data/textures/cocoa_stage_1.png +0 -0
- data/textures/cocoa_stage_2.png +0 -0
- data/textures/command_block.png +0 -0
- data/textures/comparator_off.png +0 -0
- data/textures/comparator_on.png +0 -0
- data/textures/crafting_table_front.png +0 -0
- data/textures/crafting_table_side.png +0 -0
- data/textures/crafting_table_top.png +0 -0
- data/textures/daylight_detector_inverted_top.png +0 -0
- data/textures/daylight_detector_side.png +0 -0
- data/textures/daylight_detector_top.png +0 -0
- data/textures/deadbush.png +0 -0
- data/textures/destroy_stage_0.png +0 -0
- data/textures/destroy_stage_1.png +0 -0
- data/textures/destroy_stage_2.png +0 -0
- data/textures/destroy_stage_3.png +0 -0
- data/textures/destroy_stage_4.png +0 -0
- data/textures/destroy_stage_5.png +0 -0
- data/textures/destroy_stage_6.png +0 -0
- data/textures/destroy_stage_7.png +0 -0
- data/textures/destroy_stage_8.png +0 -0
- data/textures/destroy_stage_9.png +0 -0
- data/textures/diamond_block.png +0 -0
- data/textures/diamond_ore.png +0 -0
- data/textures/dirt.png +0 -0
- data/textures/dirt_podzol_side.png +0 -0
- data/textures/dirt_podzol_top.png +0 -0
- data/textures/dispenser_front_horizontal.png +0 -0
- data/textures/dispenser_front_vertical.png +0 -0
- data/textures/door_acacia_lower.png +0 -0
- data/textures/door_acacia_upper.png +0 -0
- data/textures/door_birch_lower.png +0 -0
- data/textures/door_birch_upper.png +0 -0
- data/textures/door_dark_oak_lower.png +0 -0
- data/textures/door_dark_oak_upper.png +0 -0
- data/textures/door_iron_lower.png +0 -0
- data/textures/door_iron_upper.png +0 -0
- data/textures/door_jungle_lower.png +0 -0
- data/textures/door_jungle_upper.png +0 -0
- data/textures/door_spruce_lower.png +0 -0
- data/textures/door_spruce_upper.png +0 -0
- data/textures/door_wood_lower.png +0 -0
- data/textures/door_wood_upper.png +0 -0
- data/textures/double_plant_fern_bottom.png +0 -0
- data/textures/double_plant_fern_top.png +0 -0
- data/textures/double_plant_grass_bottom.png +0 -0
- data/textures/double_plant_grass_top.png +0 -0
- data/textures/double_plant_paeonia_bottom.png +0 -0
- data/textures/double_plant_paeonia_top.png +0 -0
- data/textures/double_plant_rose_bottom.png +0 -0
- data/textures/double_plant_rose_top.png +0 -0
- data/textures/double_plant_sunflower_back.png +0 -0
- data/textures/double_plant_sunflower_bottom.png +0 -0
- data/textures/double_plant_sunflower_front.png +0 -0
- data/textures/double_plant_sunflower_top.png +0 -0
- data/textures/double_plant_syringa_bottom.png +0 -0
- data/textures/double_plant_syringa_top.png +0 -0
- data/textures/dragon_egg.png +0 -0
- data/textures/dropper_front_horizontal.png +0 -0
- data/textures/dropper_front_vertical.png +0 -0
- data/textures/emerald_block.png +0 -0
- data/textures/emerald_ore.png +0 -0
- data/textures/enchanting_table_bottom.png +0 -0
- data/textures/enchanting_table_side.png +0 -0
- data/textures/enchanting_table_top.png +0 -0
- data/textures/end_stone.png +0 -0
- data/textures/endframe_eye.png +0 -0
- data/textures/endframe_side.png +0 -0
- data/textures/endframe_top.png +0 -0
- data/textures/farmland_dry.png +0 -0
- data/textures/farmland_wet.png +0 -0
- data/textures/fern.png +0 -0
- data/textures/fire_layer_0.png +0 -0
- data/textures/fire_layer_0.png.mcmeta +0 -38
- data/textures/fire_layer_1.png +0 -0
- data/textures/fire_layer_1.png.mcmeta +0 -3
- data/textures/flower_allium.png +0 -0
- data/textures/flower_blue_orchid.png +0 -0
- data/textures/flower_dandelion.png +0 -0
- data/textures/flower_houstonia.png +0 -0
- data/textures/flower_oxeye_daisy.png +0 -0
- data/textures/flower_paeonia.png +0 -0
- data/textures/flower_pot.png +0 -0
- data/textures/flower_rose.png +0 -0
- data/textures/flower_tulip_orange.png +0 -0
- data/textures/flower_tulip_pink.png +0 -0
- data/textures/flower_tulip_red.png +0 -0
- data/textures/flower_tulip_white.png +0 -0
- data/textures/furnace_front_off.png +0 -0
- data/textures/furnace_front_on.png +0 -0
- data/textures/furnace_side.png +0 -0
- data/textures/furnace_top.png +0 -0
- data/textures/glass.png +0 -0
- data/textures/glass_black.png +0 -0
- data/textures/glass_blue.png +0 -0
- data/textures/glass_brown.png +0 -0
- data/textures/glass_cyan.png +0 -0
- data/textures/glass_gray.png +0 -0
- data/textures/glass_green.png +0 -0
- data/textures/glass_light_blue.png +0 -0
- data/textures/glass_lime.png +0 -0
- data/textures/glass_magenta.png +0 -0
- data/textures/glass_orange.png +0 -0
- data/textures/glass_pane_top.png +0 -0
- data/textures/glass_pane_top_black.png +0 -0
- data/textures/glass_pane_top_blue.png +0 -0
- data/textures/glass_pane_top_brown.png +0 -0
- data/textures/glass_pane_top_cyan.png +0 -0
- data/textures/glass_pane_top_gray.png +0 -0
- data/textures/glass_pane_top_green.png +0 -0
- data/textures/glass_pane_top_light_blue.png +0 -0
- data/textures/glass_pane_top_lime.png +0 -0
- data/textures/glass_pane_top_magenta.png +0 -0
- data/textures/glass_pane_top_orange.png +0 -0
- data/textures/glass_pane_top_pink.png +0 -0
- data/textures/glass_pane_top_purple.png +0 -0
- data/textures/glass_pane_top_red.png +0 -0
- data/textures/glass_pane_top_silver.png +0 -0
- data/textures/glass_pane_top_white.png +0 -0
- data/textures/glass_pane_top_yellow.png +0 -0
- data/textures/glass_pink.png +0 -0
- data/textures/glass_purple.png +0 -0
- data/textures/glass_red.png +0 -0
- data/textures/glass_silver.png +0 -0
- data/textures/glass_white.png +0 -0
- data/textures/glass_yellow.png +0 -0
- data/textures/glowstone.png +0 -0
- data/textures/gold_block.png +0 -0
- data/textures/gold_ore.png +0 -0
- data/textures/grass_side.png +0 -0
- data/textures/grass_side_overlay.png +0 -0
- data/textures/grass_side_snowed.png +0 -0
- data/textures/grass_top.png +0 -0
- data/textures/gravel.png +0 -0
- data/textures/hardened_clay.png +0 -0
- data/textures/hardened_clay_stained_black.png +0 -0
- data/textures/hardened_clay_stained_blue.png +0 -0
- data/textures/hardened_clay_stained_brown.png +0 -0
- data/textures/hardened_clay_stained_cyan.png +0 -0
- data/textures/hardened_clay_stained_gray.png +0 -0
- data/textures/hardened_clay_stained_green.png +0 -0
- data/textures/hardened_clay_stained_light_blue.png +0 -0
- data/textures/hardened_clay_stained_lime.png +0 -0
- data/textures/hardened_clay_stained_magenta.png +0 -0
- data/textures/hardened_clay_stained_orange.png +0 -0
- data/textures/hardened_clay_stained_pink.png +0 -0
- data/textures/hardened_clay_stained_purple.png +0 -0
- data/textures/hardened_clay_stained_red.png +0 -0
- data/textures/hardened_clay_stained_silver.png +0 -0
- data/textures/hardened_clay_stained_white.png +0 -0
- data/textures/hardened_clay_stained_yellow.png +0 -0
- data/textures/hay_block_side.png +0 -0
- data/textures/hay_block_top.png +0 -0
- data/textures/hopper_inside.png +0 -0
- data/textures/hopper_outside.png +0 -0
- data/textures/hopper_top.png +0 -0
- data/textures/ice.png +0 -0
- data/textures/ice_packed.png +0 -0
- data/textures/iron_bars.png +0 -0
- data/textures/iron_block.png +0 -0
- data/textures/iron_ore.png +0 -0
- data/textures/iron_trapdoor.png +0 -0
- data/textures/itemframe_background.png +0 -0
- data/textures/jukebox_side.png +0 -0
- data/textures/jukebox_top.png +0 -0
- data/textures/ladder.png +0 -0
- data/textures/lapis_block.png +0 -0
- data/textures/lapis_ore.png +0 -0
- data/textures/lava_flow.png +0 -0
- data/textures/lava_flow.png.mcmeta +0 -5
- data/textures/lava_still.png +0 -0
- data/textures/lava_still.png.mcmeta +0 -45
- data/textures/leaves_acacia.png +0 -0
- data/textures/leaves_big_oak.png +0 -0
- data/textures/leaves_birch.png +0 -0
- data/textures/leaves_jungle.png +0 -0
- data/textures/leaves_oak.png +0 -0
- data/textures/leaves_spruce.png +0 -0
- data/textures/lever.png +0 -0
- data/textures/log_acacia.png +0 -0
- data/textures/log_acacia_top.png +0 -0
- data/textures/log_big_oak.png +0 -0
- data/textures/log_big_oak_top.png +0 -0
- data/textures/log_birch.png +0 -0
- data/textures/log_birch_top.png +0 -0
- data/textures/log_jungle.png +0 -0
- data/textures/log_jungle_top.png +0 -0
- data/textures/log_oak.png +0 -0
- data/textures/log_oak_top.png +0 -0
- data/textures/log_spruce.png +0 -0
- data/textures/log_spruce_top.png +0 -0
- data/textures/melon_side.png +0 -0
- data/textures/melon_stem_connected.png +0 -0
- data/textures/melon_stem_disconnected.png +0 -0
- data/textures/melon_top.png +0 -0
- data/textures/mob_spawner.png +0 -0
- data/textures/mushroom_block_inside.png +0 -0
- data/textures/mushroom_block_skin_brown.png +0 -0
- data/textures/mushroom_block_skin_red.png +0 -0
- data/textures/mushroom_block_skin_stem.png +0 -0
- data/textures/mushroom_brown.png +0 -0
- data/textures/mushroom_red.png +0 -0
- data/textures/mycelium_side.png +0 -0
- data/textures/mycelium_top.png +0 -0
- data/textures/nether_brick.png +0 -0
- data/textures/nether_wart_stage_0.png +0 -0
- data/textures/nether_wart_stage_1.png +0 -0
- data/textures/nether_wart_stage_2.png +0 -0
- data/textures/netherrack.png +0 -0
- data/textures/noteblock.png +0 -0
- data/textures/obsidian.png +0 -0
- data/textures/piston_bottom.png +0 -0
- data/textures/piston_inner.png +0 -0
- data/textures/piston_side.png +0 -0
- data/textures/piston_top_normal.png +0 -0
- data/textures/piston_top_sticky.png +0 -0
- data/textures/planks_acacia.png +0 -0
- data/textures/planks_big_oak.png +0 -0
- data/textures/planks_birch.png +0 -0
- data/textures/planks_jungle.png +0 -0
- data/textures/planks_oak.png +0 -0
- data/textures/planks_spruce.png +0 -0
- data/textures/portal.png +0 -0
- data/textures/portal.png.mcmeta +0 -3
- data/textures/potatoes_stage_0.png +0 -0
- data/textures/potatoes_stage_1.png +0 -0
- data/textures/potatoes_stage_2.png +0 -0
- data/textures/potatoes_stage_3.png +0 -0
- data/textures/prismarine_bricks.png +0 -0
- data/textures/prismarine_dark.png +0 -0
- data/textures/prismarine_rough.png +0 -0
- data/textures/prismarine_rough.png.mcmeta +0 -30
- data/textures/pumpkin_face_off.png +0 -0
- data/textures/pumpkin_face_on.png +0 -0
- data/textures/pumpkin_side.png +0 -0
- data/textures/pumpkin_stem_connected.png +0 -0
- data/textures/pumpkin_stem_disconnected.png +0 -0
- data/textures/pumpkin_top.png +0 -0
- data/textures/quartz_block_bottom.png +0 -0
- data/textures/quartz_block_chiseled.png +0 -0
- data/textures/quartz_block_chiseled_top.png +0 -0
- data/textures/quartz_block_lines.png +0 -0
- data/textures/quartz_block_lines_top.png +0 -0
- data/textures/quartz_block_side.png +0 -0
- data/textures/quartz_block_top.png +0 -0
- data/textures/quartz_ore.png +0 -0
- data/textures/rail_activator.png +0 -0
- data/textures/rail_activator_powered.png +0 -0
- data/textures/rail_detector.png +0 -0
- data/textures/rail_detector_powered.png +0 -0
- data/textures/rail_golden.png +0 -0
- data/textures/rail_golden_powered.png +0 -0
- data/textures/rail_normal.png +0 -0
- data/textures/rail_normal_turned.png +0 -0
- data/textures/red_sand.png +0 -0
- data/textures/red_sandstone_bottom.png +0 -0
- data/textures/red_sandstone_carved.png +0 -0
- data/textures/red_sandstone_normal.png +0 -0
- data/textures/red_sandstone_smooth.png +0 -0
- data/textures/red_sandstone_top.png +0 -0
- data/textures/redstone_block.png +0 -0
- data/textures/redstone_dust_cross.png +0 -0
- data/textures/redstone_dust_cross_overlay.png +0 -0
- data/textures/redstone_dust_line.png +0 -0
- data/textures/redstone_dust_line_overlay.png +0 -0
- data/textures/redstone_lamp_off.png +0 -0
- data/textures/redstone_lamp_on.png +0 -0
- data/textures/redstone_ore.png +0 -0
- data/textures/redstone_torch_off.png +0 -0
- data/textures/redstone_torch_on.png +0 -0
- data/textures/reeds.png +0 -0
- data/textures/repeater_off.png +0 -0
- data/textures/repeater_on.png +0 -0
- data/textures/sand.png +0 -0
- data/textures/sandstone_bottom.png +0 -0
- data/textures/sandstone_carved.png +0 -0
- data/textures/sandstone_normal.png +0 -0
- data/textures/sandstone_smooth.png +0 -0
- data/textures/sandstone_top.png +0 -0
- data/textures/sapling_acacia.png +0 -0
- data/textures/sapling_birch.png +0 -0
- data/textures/sapling_jungle.png +0 -0
- data/textures/sapling_oak.png +0 -0
- data/textures/sapling_roofed_oak.png +0 -0
- data/textures/sapling_spruce.png +0 -0
- data/textures/sea_lantern.png +0 -0
- data/textures/sea_lantern.png.mcmeta +0 -5
- data/textures/slime.png +0 -0
- data/textures/snow.png +0 -0
- data/textures/soul_sand.png +0 -0
- data/textures/sponge.png +0 -0
- data/textures/sponge_wet.png +0 -0
- data/textures/stone.png +0 -0
- data/textures/stone_andesite.png +0 -0
- data/textures/stone_andesite_smooth.png +0 -0
- data/textures/stone_diorite.png +0 -0
- data/textures/stone_diorite_smooth.png +0 -0
- data/textures/stone_granite.png +0 -0
- data/textures/stone_granite_smooth.png +0 -0
- data/textures/stone_slab_side.png +0 -0
- data/textures/stone_slab_top.png +0 -0
- data/textures/stonebrick.png +0 -0
- data/textures/stonebrick_carved.png +0 -0
- data/textures/stonebrick_cracked.png +0 -0
- data/textures/stonebrick_mossy.png +0 -0
- data/textures/tallgrass.png +0 -0
- data/textures/tnt_bottom.png +0 -0
- data/textures/tnt_side.png +0 -0
- data/textures/tnt_top.png +0 -0
- data/textures/torch_on.png +0 -0
- data/textures/trapdoor.png +0 -0
- data/textures/trip_wire.png +0 -0
- data/textures/trip_wire_source.png +0 -0
- data/textures/vine.png +0 -0
- data/textures/water_flow.png +0 -0
- data/textures/water_flow.png.mcmeta +0 -3
- data/textures/water_still.png +0 -0
- data/textures/water_still.png.mcmeta +0 -5
- data/textures/waterlily.png +0 -0
- data/textures/web.png +0 -0
- data/textures/wheat_stage_0.png +0 -0
- data/textures/wheat_stage_1.png +0 -0
- data/textures/wheat_stage_2.png +0 -0
- data/textures/wheat_stage_3.png +0 -0
- data/textures/wheat_stage_4.png +0 -0
- data/textures/wheat_stage_5.png +0 -0
- data/textures/wheat_stage_6.png +0 -0
- data/textures/wheat_stage_7.png +0 -0
- data/textures/wool_colored_black.png +0 -0
- data/textures/wool_colored_blue.png +0 -0
- data/textures/wool_colored_brown.png +0 -0
- data/textures/wool_colored_cyan.png +0 -0
- data/textures/wool_colored_gray.png +0 -0
- data/textures/wool_colored_green.png +0 -0
- data/textures/wool_colored_light_blue.png +0 -0
- data/textures/wool_colored_lime.png +0 -0
- data/textures/wool_colored_magenta.png +0 -0
- data/textures/wool_colored_orange.png +0 -0
- data/textures/wool_colored_pink.png +0 -0
- data/textures/wool_colored_purple.png +0 -0
- data/textures/wool_colored_red.png +0 -0
- data/textures/wool_colored_silver.png +0 -0
- data/textures/wool_colored_white.png +0 -0
- data/textures/wool_colored_yellow.png +0 -0
- data/textures.zip +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 144001b6a79d4c4e769f79d4945856ba6378316d
|
4
|
+
data.tar.gz: fa4e456ade60eadeaafa495078341cad8c1dba22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de51d06a5c62a7dda4b4c086bbefb0ed1eb88aa08575e31d44e13129c6cdf309825f8ff167278c951952e17d071ccdc7ed30d57d37ac8a7851e7f1a74ab9cc19
|
7
|
+
data.tar.gz: fdc48d92deb4ab917cdbb8ebc71d1f5535424e87c3ca4d2f9595f62618ee5d9319aa3e1e0aec6470d64b8f6439ee3cff3ada893a2cd61279a3014f14bd2b8568
|
data/.gitignore
CHANGED
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
|
-
|
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(
|
475
|
-
pixels =
|
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
|
data/lib/mc_dot_art_maker/dot.rb
CHANGED
@@ -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
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
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
|
-
|
24
|
-
|
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
|
-
|
27
|
-
|
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, :
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
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.
|
16
|
-
@schematic_helper.read
|
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
|
-
|
21
|
-
def resize_to_fit(width, height)
|
22
|
-
@image = @image.resize_to_fit(width, height)
|
22
|
+
@is_locked = false
|
23
23
|
|
24
|
-
|
25
|
-
@cells = nil
|
24
|
+
MCDotArtMaker::Dot.set_color_palette(@block_list)
|
26
25
|
end
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
@
|
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
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
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
|
-
|
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
|
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
|
-
|
138
|
-
|
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
|
-
@
|
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
|
-
@
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
data/mc_dot_art_maker.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'mc_dot_art_maker'
|
3
|
-
s.version = '0.
|
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
|
Binary file
|
Binary file
|
Binary file
|
data/test/images/tmp/{dither_methods_RiemersmaDitherMethod.png → normal_conversion_texture.png}
RENAMED
File without changes
|
Binary file
|
data/test/test_block_list.rb
CHANGED
@@ -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
|
data/test/test_dither_method.rb
CHANGED
@@ -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
|