def test_surface_to_array_3d(self): try: from numpy import empty, dtype except ImportError: return palette = self.test_palette dst_dims = self.surf_size + (3, ) destinations = [empty(dst_dims, t) for t in self.dst_types] if (pygame.get_sdl_byteorder() == pygame.LIL_ENDIAN): swapped_dst = empty(dst_dims, dtype('>u4')) else: swapped_dst = empty(dst_dims, dtype('<u4')) for surf in self.sources: src_bitsize = surf.get_bitsize() for dst in destinations: dst[...] = 0 self.assertFalse(surf.get_locked()) surface_to_array(dst, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: r_surf, g_surf, b_surf, a_surf = surf.get_at(posn) r_arr, g_arr, b_arr = dst[posn] self.assertEqual( r_arr, r_surf, "%i != %i, color: red, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) self.assertEqual( g_arr, g_surf, "%i != %i, color: green, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) self.assertEqual( b_arr, b_surf, "%i != %i, color: blue, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) swapped_dst[...] = 0 self.assertFalse(surf.get_locked()) surface_to_array(swapped_dst, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: r_surf, g_surf, b_surf, a_surf = surf.get_at(posn) r_arr, g_arr, b_arr = swapped_dst[posn] self.assertEqual( r_arr, r_surf, "%i != %i, color: red, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) self.assertEqual( g_arr, g_surf, "%i != %i, color: green, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) self.assertEqual( b_arr, b_surf, "%i != %i, color: blue, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn))
def array_blue(surface): """pygame.numpyarray.array_blue(Surface): return array copy pixel blue into a 2d array Copy the pixel blue values from a Surface into a 2D array. This will work for any type of Surface format. This function will temporarily lock the Surface as pixels are copied (see the Surface.lock - lock the Surface memory for pixel access method). """ size = surface.get_size() array = numpy.empty(size, numpy.uint8) surface_to_array(array, surface, "B") return array
def array3d(surface): """pygame.numpyarray.array3d(Surface): return array copy pixels into a 3d array Copy the pixels from a Surface into a 3D array. The bit depth of the surface will control the size of the integer values, and will work for any type of pixel format. This function will temporarily lock the Surface as pixels are copied (see the Surface.lock - lock the Surface memory for pixel access method). """ w, h = surface.get_size() array = numpy.empty((w, h, 3), numpy.uint8) surface_to_array(array, surface) return array
def iter_surface_to_array_3d(self, rgba_masks): dst = pygame.Surface(self.surf_size, 0, 24, masks=rgba_masks) for surf in self.sources: dst.fill((0, 0, 0, 0)) src_bitsize = surf.get_bitsize() view = dst.get_view('3') self.assertFalse(surf.get_locked()) surface_to_array(view, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sc = surf.get_at(posn)[0:3] dc = dst.get_at(posn)[0:3] self.assertEqual( dc, sc, "%s != %s: flags: %i" ", bpp: %i, posn: %s" % (dc, sc, surf.get_flags(), surf.get_bitsize(), posn)) view = None
def array_alpha(surface): """pygame.numpyarray.array_alpha(Surface): return array copy pixel alphas into a 2d array Copy the pixel alpha values (degree of transparency) from a Surface into a 2D array. This will work for any type of Surface format. Surfaces without a pixel alpha will return an array with all opaque values. This function will temporarily lock the Surface as pixels are copied (see the Surface.lock - lock the Surface memory for pixel access method). """ size = surface.get_size() array = numpy.empty(size, numpy.uint8) surface_to_array(array, surface, "A") return array
def array_colorkey(surface): """pygame.numpyarray.array_colorkey(Surface): return array copy the colorkey values into a 2d array Create a new array with the colorkey transparency value from each pixel. If the pixel matches the colorkey it will be fully tranparent; otherwise it will be fully opaque. This will work on any type of Surface format. If the image has no colorkey a solid opaque array will be returned. This function will temporarily lock the Surface as pixels are copied. """ size = surface.get_size() array = numpy.empty(size, numpy.uint8) surface_to_array(array, surface, "C") return array
def iter_surface_to_array_3d(self, rgba_masks): dst = pygame.Surface(self.surf_size, 0, 24, masks=rgba_masks) for surf in self.sources: dst.fill((0, 0, 0, 0)) src_bitsize = surf.get_bitsize() view = dst.get_view('3') self.assertFalse(surf.get_locked()) surface_to_array(view, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sc = surf.get_at(posn)[0:3] dc = dst.get_at(posn)[0:3] self.assertEqual(dc, sc, "%s != %s: flags: %i" ", bpp: %i, posn: %s" % (dc, sc, surf.get_flags(), surf.get_bitsize(), posn)) view = None
def test_surface_to_array_3d(self): if pygame.get_sdl_byteorder() == pygame.LIL_ENDIAN: masks = (0xff, 0xff00, 0xff0000, 0) else: masks = (0xff000000, 0xff0000, 0xff00, 0) dst = pygame.Surface(self.surf_size, 0, 24, masks=masks) for surf in self.sources: dst.fill((0, 0, 0, 0)) src_bitsize = surf.get_bitsize() view = dst.get_view('3') self.assertFalse(surf.get_locked()) surface_to_array(view, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sc = surf.get_at(posn)[0:3] dc = dst.get_at(posn)[0:3] self.assertEqual( dc, sc, "%s != %s: flags: %i" ", bpp: %i, posn: %s" % (dc, sc, surf.get_flags(), surf.get_bitsize(), posn)) del view
def test_surface_to_array_2d(self): alpha_color = (0, 0, 0, 128) for surf in self.sources: src_bitsize = surf.get_bitsize() for dst_bitsize in self.bitsizes: dst = pygame.Surface(surf.get_size(), 0, dst_bitsize) dst.fill((0, 0, 0, 0)) view = dst.get_view('2') self.assertFalse(surf.get_locked()) if dst_bitsize < src_bitsize: self.assertRaises(ValueError, surface_to_array, view, surf) self.assertFalse(surf.get_locked()) continue surface_to_array(view, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sp = surf.get_at_mapped(posn) dp = dst.get_at_mapped(posn) self.assertEqual(dp, sp, "%s != %s: flags: %i" ", bpp: %i, posn: %s" % (dp, sp, surf.get_flags(), surf.get_bitsize(), posn)) del view if surf.get_masks()[3]: dst.fill((0, 0, 0, 0)) view = dst.get_view('2') posn = (2, 1) surf.set_at(posn, alpha_color) self.assertFalse(surf.get_locked()) surface_to_array(view, surf) self.assertFalse(surf.get_locked()) sp = surf.get_at_mapped(posn) dp = dst.get_at_mapped(posn) self.assertEqual(dp, sp, "%s != %s: bpp: %i" % (dp, sp, surf.get_bitsize()))
def test_surface_to_array_2d(self): alpha_color = (0, 0, 0, 128) for surf in self.sources: src_bitsize = surf.get_bitsize() for dst_bitsize in self.bitsizes: # dst in a surface standing in for a 2 dimensional array # of unsigned integers. The byte order is system dependent. dst = pygame.Surface(surf.get_size(), 0, dst_bitsize) dst.fill((0, 0, 0, 0)) view = dst.get_view('2') self.assertFalse(surf.get_locked()) if dst_bitsize < src_bitsize: self.assertRaises(ValueError, surface_to_array, view, surf) self.assertFalse(surf.get_locked()) continue surface_to_array(view, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sp = surf.get_at_mapped(posn) dp = dst.get_at_mapped(posn) self.assertEqual( dp, sp, "%s != %s: flags: %i" ", bpp: %i, posn: %s" % (dp, sp, surf.get_flags(), surf.get_bitsize(), posn)) del view if surf.get_masks()[3]: dst.fill((0, 0, 0, 0)) view = dst.get_view('2') posn = (2, 1) surf.set_at(posn, alpha_color) self.assertFalse(surf.get_locked()) surface_to_array(view, surf) self.assertFalse(surf.get_locked()) sp = surf.get_at_mapped(posn) dp = dst.get_at_mapped(posn) self.assertEqual( dp, sp, "%s != %s: bpp: %i" % (dp, sp, surf.get_bitsize())) # Swapped endian destination array pai_flags = arrinter.PAI_ALIGNED | arrinter.PAI_WRITEABLE for surf in self.sources: for itemsize in [1, 2, 4, 8]: if itemsize < surf.get_bytesize(): continue a = arrinter.Array(surf.get_size(), 'u', itemsize, flags=pai_flags) surface_to_array(a, surf) for posn, i in self.test_points: sp = unsigned32(surf.get_at_mapped(posn)) dp = a[posn] self.assertEqual( dp, sp, "%s != %s: itemsize: %i, flags: %i" ", bpp: %i, posn: %s" % (dp, sp, itemsize, surf.get_flags(), surf.get_bitsize(), posn))
def array2d(surface): """pygame.numpyarray.array2d(Surface): return array copy pixels into a 2d array Copy the pixels from a Surface into a 2D array. The bit depth of the surface will control the size of the integer values, and will work for any type of pixel format. This function will temporarily lock the Surface as pixels are copied (see the Surface.lock - lock the Surface memory for pixel access method). """ bpp = surface.get_bytesize() try: dtype = (numpy.uint8, numpy.uint16, numpy.int32, numpy.int32)[bpp - 1] except IndexError: raise ValueError("unsupported bit depth %i for 2D array" % (bpp * 8,)) size = surface.get_size() array = numpy.empty(size, dtype) surface_to_array(array, surface) return array
def test_surface_to_array_3d(self): if pygame.get_sdl_byteorder() == pygame.LIL_ENDIAN: masks = (0xff, 0xff00, 0xff0000, 0) else: masks = (0xff000000, 0xff0000, 0xff00, 0) dst = pygame.Surface(self.surf_size, 0, 24, masks=masks) for surf in self.sources: dst.fill((0, 0, 0, 0)) src_bitsize = surf.get_bitsize() view = dst.get_view('3') self.assertFalse(surf.get_locked()) surface_to_array(view, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sc = surf.get_at(posn)[0:3] dc = dst.get_at(posn)[0:3] self.assertEqual(dc, sc, "%s != %s: flags: %i" ", bpp: %i, posn: %s" % (dc, sc, surf.get_flags(), surf.get_bitsize(), posn)) del view
def test_surface_to_array_newbuf(self): array = self.Array2D(range(0, 15)) self.assertNotEqual(array.content[0], self.surface.get_at_mapped((0, 0))) surface_to_array(array, self.surface) self.assertCopy2D(self.surface, array)
def test_surface_to_array_2d(self): try: from numpy import empty, dtype except ImportError: return palette = self.test_palette alpha_color = (0, 0, 0, 128) dst_dims = self.surf_size destinations = [empty(dst_dims, t) for t in self.dst_types] if (pygame.get_sdl_byteorder() == pygame.LIL_ENDIAN): swapped_dst = empty(dst_dims, dtype('>u4')) else: swapped_dst = empty(dst_dims, dtype('<u4')) for surf in self.sources: src_bytesize = surf.get_bytesize() for dst in destinations: if dst.itemsize < src_bytesize: self.assertRaises(ValueError, surface_to_array, dst, surf) continue dst[...] = 0 self.assertFalse(surf.get_locked()) surface_to_array(dst, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sp = unsigned32(surf.get_at_mapped(posn)) dp = dst[posn] self.assertEqual(dp, sp, "%s != %s: flags: %i" ", bpp: %i, dtype: %s, posn: %s" % (dp, sp, surf.get_flags(), surf.get_bitsize(), dst.dtype, posn)) if surf.get_masks()[3]: posn = (2, 1) surf.set_at(posn, alpha_color) surface_to_array(dst, surf) sp = unsigned32(surf.get_at_mapped(posn)) dp = dst[posn] self.assertEqual(dp, sp, "%s != %s: bpp: %i" % (dp, sp, surf.get_bitsize())) swapped_dst[...] = 0 self.assertFalse(surf.get_locked()) surface_to_array(swapped_dst, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sp = unsigned32(surf.get_at_mapped(posn)) dp = swapped_dst[posn] self.assertEqual(dp, sp, "%s != %s: flags: %i" ", bpp: %i, dtype: %s, posn: %s" % (dp, sp, surf.get_flags(), surf.get_bitsize(), dst.dtype, posn)) if surf.get_masks()[3]: posn = (2, 1) surf.set_at(posn, alpha_color) self.assertFalse(surf.get_locked()) surface_to_array(swapped_dst, surf) self.assertFalse(surf.get_locked()) sp = unsigned32(surf.get_at_mapped(posn)) dp = swapped_dst[posn] self.assertEqual(dp, sp, "%s != %s: bpp: %i" % (dp, sp, surf.get_bitsize()))
def test_surface_to_array_2d(self): alpha_color = (0, 0, 0, 128) for surf in self.sources: src_bitsize = surf.get_bitsize() for dst_bitsize in self.bitsizes: # dst in a surface standing in for a 2 dimensional array # of unsigned integers. The byte order is system dependent. dst = pygame.Surface(surf.get_size(), 0, dst_bitsize) dst.fill((0, 0, 0, 0)) view = dst.get_view('2') self.assertFalse(surf.get_locked()) if dst_bitsize < src_bitsize: self.assertRaises(ValueError, surface_to_array, view, surf) self.assertFalse(surf.get_locked()) continue surface_to_array(view, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: sp = surf.get_at_mapped(posn) dp = dst.get_at_mapped(posn) self.assertEqual(dp, sp, "%s != %s: flags: %i" ", bpp: %i, posn: %s" % (dp, sp, surf.get_flags(), surf.get_bitsize(), posn)) del view if surf.get_masks()[3]: dst.fill((0, 0, 0, 0)) view = dst.get_view('2') posn = (2, 1) surf.set_at(posn, alpha_color) self.assertFalse(surf.get_locked()) surface_to_array(view, surf) self.assertFalse(surf.get_locked()) sp = surf.get_at_mapped(posn) dp = dst.get_at_mapped(posn) self.assertEqual(dp, sp, "%s != %s: bpp: %i" % (dp, sp, surf.get_bitsize())) if IS_PYPY: return # Swapped endian destination array pai_flags = arrinter.PAI_ALIGNED | arrinter.PAI_WRITEABLE for surf in self.sources: for itemsize in [1, 2, 4, 8]: if itemsize < surf.get_bytesize(): continue a = arrinter.Array(surf.get_size(), 'u', itemsize, flags=pai_flags) surface_to_array(a, surf) for posn, i in self.test_points: sp = unsigned32(surf.get_at_mapped(posn)) dp = a[posn] self.assertEqual(dp, sp, "%s != %s: itemsize: %i, flags: %i" ", bpp: %i, posn: %s" % (dp, sp, itemsize, surf.get_flags(), surf.get_bitsize(), posn))
def test_surface_to_array_3d(self): try: from numpy import empty, dtype except ImportError: return palette = self.test_palette dst_dims = self.surf_size + (3,) destinations = [empty(dst_dims, t) for t in self.dst_types] if (pygame.get_sdl_byteorder() == pygame.LIL_ENDIAN): swapped_dst = empty(dst_dims, dtype('>u4')) else: swapped_dst = empty(dst_dims, dtype('<u4')) for surf in self.sources: src_bitsize = surf.get_bitsize() for dst in destinations: dst[...] = 0 self.assertFalse(surf.get_locked()) surface_to_array(dst, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: r_surf, g_surf, b_surf, a_surf = surf.get_at(posn) r_arr, g_arr, b_arr = dst[posn] self.assertEqual(r_arr, r_surf, "%i != %i, color: red, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) self.assertEqual(g_arr, g_surf, "%i != %i, color: green, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) self.assertEqual(b_arr, b_surf, "%i != %i, color: blue, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) swapped_dst[...] = 0 self.assertFalse(surf.get_locked()) surface_to_array(swapped_dst, surf) self.assertFalse(surf.get_locked()) for posn, i in self.test_points: r_surf, g_surf, b_surf, a_surf = surf.get_at(posn) r_arr, g_arr, b_arr = swapped_dst[posn] self.assertEqual(r_arr, r_surf, "%i != %i, color: red, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) self.assertEqual(g_arr, g_surf, "%i != %i, color: green, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn)) self.assertEqual(b_arr, b_surf, "%i != %i, color: blue, flags: %i" ", bpp: %i, posn: %s" % (r_arr, r_surf, surf.get_flags(), surf.get_bitsize(), posn))