def test_process_tile_two_colors(self): expected_dot_profile = bytearray(([0] * 4 + [1] * 8 + [0] * 4) * 4) img = Image.open('testdata/blue-and-red-tile.png') processor = image_processor.ImageProcessor() processor.load_image(img) (color_needs, dot_profile) = processor.process_tile(0, 0, 0, 0) self.assertEqual(color_needs, bytearray([2, 7, 0xff, 0xff])) self.assertEqual(dot_profile, expected_dot_profile) img = Image.open('testdata/red-and-blue-tile.png') processor = image_processor.ImageProcessor() processor.load_image(img) (color_needs, dot_profile) = processor.process_tile(0, 0, 0, 0) self.assertEqual(color_needs, bytearray([7, 2, 0xff, 0xff])) self.assertEqual(dot_profile, expected_dot_profile)
def process_image(self, img, palette_text=None, auto_sprite_bg=False, traversal=None): if 'free' in self.args.traversal: self.processor = free_sprite_processor.FreeSpriteProcessor( self.args.traversal) self.processor.set_verbose('--verbose' in sys.argv) self.processor.process_image(img, palette_text, self.args.bg_color.mask, self.args.bg_color.fill, self.args.is_locked_tiles, self.args.lock_sprite_flips, self.args.allow_overflow) elif self.args.traversal == '8x16': self.processor = eight_by_sixteen_processor.EightBySixteenProcessor( ) self.processor.process_image( img, palette_text, self.args.bg_color.mask, self.args.bg_color.fill, self.args.traversal, self.args.is_sprite, self.args.is_locked_tiles, self.args.lock_sprite_flips, self.args.allow_overflow) else: self.processor = image_processor.ImageProcessor() if auto_sprite_bg: self.processor._test_only_auto_sprite_bg = auto_sprite_bg self.processor.process_image( img, palette_text, self.args.bg_color.mask, self.args.bg_color.fill, self.args.traversal, self.args.is_sprite, self.args.is_locked_tiles, self.args.lock_sprite_flips, self.args.allow_overflow) self.ppu_memory = self.processor.ppu_memory() self.err = self.processor.err()
def test_process_tile_solid(self): img = Image.open('testdata/blue-tile.png') processor = image_processor.ImageProcessor() processor.load_image(img) (color_needs, dot_profile) = processor.process_tile(0, 0, 0, 0) self.assertEqual(color_needs, bytearray([2, 0xff, 0xff, 0xff])) self.assertEqual(dot_profile, bytearray([0] * 64))
def test_extract_16overuse_bmp(self): """Extract a palette from a 16-color indexed bmp with 8bpp.""" img = Image.open('testdata/full-image-16color-overuse.bmp') processor = image_processor.ImageProcessor() extractor = extract_indexed_image_palette.ExtractIndexedImagePalette( processor) pal = extractor.extract_palette(self.imgpal(img)) self.assertEqual(str(pal), 'P/16-30-01-0f/16-30-01-38/16-30-19-28/16-23-23-28/')
def process_image(self, img, palette_text=None, traversal=None): if not traversal: traversal = 'horizontal' self.processor = image_processor.ImageProcessor() self.processor.process_image( img, palette_text, self.args.bg_color.mask, self.args.bg_color.fill, traversal, self.args.is_sprite, self.args.is_locked_tiles, self.args.lock_sprite_flips, self.args.allow_overflow) self.ppu_memory = self.processor.ppu_memory()
def test_wrapped_64_bytes_png(self): processor = image_processor.ImageProcessor() extractor = extract_indexed_image_palette.ExtractIndexedImagePalette( processor) bytes = [ 252, 56, 0, 0, 255, 255, 255, 1, 0, 0, 252, 2, 0, 0, 0, 3, 252, 56, 0, 4, 255, 255, 255, 5, 0, 0, 252, 6, 252, 216, 132, 8, 252, 56, 0, 8, 255, 255, 255, 9, 0, 184, 0, 10, 248, 184, 0, 11, 252, 56, 0, 12, 173, 145, 249, 13, 173, 145, 249, 14, 248, 184, 0, 15 ] pal = extractor.extract_palette(MockWrappedImagePalette(bytes, 'PNG')) self.assertEqual(str(pal), 'P/16-30-01-0f/16-30-01-38/16-30-19-28/16-23-23-28/')
def test_wrapped_48_bytes_bmp(self): processor = image_processor.ImageProcessor() extractor = extract_indexed_image_palette.ExtractIndexedImagePalette( processor) bytes = [ 0, 56, 252, 255, 255, 255, 252, 0, 0, 0, 0, 0, 0, 56, 252, 255, 255, 255, 252, 0, 0, 132, 216, 252, 0, 56, 252, 255, 255, 255, 0, 184, 0, 0, 184, 248, 0, 56, 252, 249, 145, 173, 249, 145, 173, 0, 184, 248 ] pal = extractor.extract_palette(MockWrappedImagePalette(bytes, 'BMP')) self.assertEqual(str(pal), 'P/16-30-01-0f/16-30-01-38/16-30-19-28/16-23-23-28/')
def test_process_tile_all_four_colors(self): img = Image.open('testdata/gradiant-tile.png') processor = image_processor.ImageProcessor() processor.load_image(img) (color_needs, dot_profile) = processor.process_tile(0, 0, 0, 0) self.assertEqual(color_needs, bytearray([2, 0x21, 0x2a, 0x0b])) self.assertEqual( dot_profile, bytearray([ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 2, 0, 0, 1, 1, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 3, 1, 1, 2, 2, 2, 2, 3, 3, 1, 2, 2, 2, 2, 3, 3, 3 ]))
def test_process_tile_error_palette_overflow(self): img = Image.open('testdata/palette-overflow-tile.png') processor = image_processor.ImageProcessor() processor.load_image(img) with self.assertRaises(errors.PaletteOverflowError): processor.process_tile(0, 0, 0, 0)
def test_process_tile_error_color_not_allowed(self): img = Image.open('testdata/color-not-allowed-tile.png') processor = image_processor.ImageProcessor() processor.load_image(img) with self.assertRaises(errors.ColorNotAllowedError): processor.process_tile(0, 0, 0, 0)