Exemple #1
0
 def get_round(self, radius, background):
     w, h = self.c.get_size()
     surface = self.s.copy().convert_alpha()
     newsurf = pygame.Surface((w, h),
                              pygame.SRCALPHA,
                              depth=self.c.get_bitsize()).convert_alpha()
     newsurf.fill((0, 0, 0, 0))
     inner = self.c.get_rect().inflate((-4 * radius, -4 * radius))
     n_a = surfarray.pixels_alpha(newsurf)
     n_rgb = surfarray.pixels3d(newsurf)
     b_b_c_rgb = surfarray.pixels3d(self.c)
     rngs = [(inner.x, inner.y, 0, inner.x, 0, inner.y),
             (inner.right, inner.y, inner.right, w, 0, inner.y),
             (inner.x, inner.bottom, 0, inner.x, inner.bottom, h),
             (inner.right, inner.bottom, inner.right, w, inner.bottom, h)]
     for i, ranges in enumerate(rngs):
         x0, y0, xi, xf, yi, yf = ranges
         for x in range(xi, xf):
             for y in range(yi, yf):
                 d = math.hypot(x - x0, y - y0)
                 n_a[x][y] = 255 - get_y(d, 0, 2 * radius)
                 n_rgb[x][y] = b_b_c_rgb[x][y]
     del n_a
     del n_rgb
     surface.unlock()
     newsurf.unlock()
     surface.blit(newsurf, (0, 0))
     return surface
Exemple #2
0
 def get_antiround(self, radius, background):
     w, h = self.c.get_size()
     surface = self.s.copy().convert_alpha()
     newsurf = pygame.Surface((w, h),
                              pygame.SRCALPHA,
                              depth=self.c.get_bitsize()).convert_alpha()
     newsurf.fill((0, 0, 0, 0))
     outer = self.c.get_rect().inflate((-2 * radius, -2 * radius))
     n_a = surfarray.pixels_alpha(newsurf)
     n_rgb = surfarray.pixels3d(newsurf)
     b_b_c_rgb = surfarray.pixels3d(self.c)
     rngs = [(0, 0, 0, 2 * radius, 0, 2 * radius),
             (w, 0, w - 2 * radius, w, 0, 2 * radius),
             (0, h, 0, 2 * radius, h - 2 * radius, h),
             (w, h, w - 2 * radius, w, h - 2 * radius, h)]
     for i, ranges in enumerate(rngs):
         x0, y0, xi, xf, yi, yf = ranges
         for x in range(xi, xf):
             for y in range(yi, yf):
                 d = math.hypot(x - x0, y - y0)
                 n_a[x][y] = get_y(d, 0, 2 * radius)
                 n_rgb[x][y] = b_b_c_rgb[x][y]  #grass
     del n_a
     del n_rgb
     surface.unlock()
     newsurf.unlock()
     surface.blit(newsurf, (0, 0))
     return surface
Exemple #3
0
 def cut_side(self, side, radius, background):
     w, h = self.c.get_size()
     b_c_surf = self.c.copy().convert_alpha()  #beach
     newsurf = pygame.Surface((w, h),
                              pygame.SRCALPHA,
                              depth=self.c.get_bitsize()).convert_alpha()
     newsurf.fill((0, 0, 0, 0))
     n_a = surfarray.pixels_alpha(newsurf)
     n_rgb = surfarray.pixels3d(newsurf)
     s_rgb = surfarray.pixels3d(self.s)
     b_c_rgb = surfarray.pixels3d(b_c_surf)
     if "top" in side:
         for x in range(w):
             for y in range(0, 2 * radius):
                 n_a[x][y] = 255 - get_y(y, 0, 2 * radius)
                 n_rgb[x][y] = s_rgb[x][y]
     if "bottom" in side:
         for x in range(w):
             for y in range(h - 2 * radius, h):
                 n_a[x][y] = get_y(y, h - 2 * radius, h)
                 n_rgb[x][y] = s_rgb[x][y]
     if "left" in side:
         for y in range(h):
             for x in range(0, 2 * radius):
                 n_a[x][y] = 255 - get_y(x, 0, 2 * radius)
                 n_rgb[x][y] = s_rgb[x][y]
     if "right" in side:
         for y in range(h):
             for x in range(w - 2 * radius, w):
                 n_a[x][y] = get_y(x, w - 2 * radius, w)
                 n_rgb[x][y] = s_rgb[x][y]
     del n_a
     del n_rgb
     del b_c_rgb
     b_c_surf.unlock()
     newsurf.unlock()
     b_c_surf.blit(newsurf, (0, 0))
     return b_c_surf