Pygameで画像処理10
モザイク化です。
画面遷移時に使えますね。
import pygame import math # Mosaic # @param tBuf サーフェス # @param RECT モザイクをかける範囲 # @param SIZE モザイクの大きさ def transMosaic(tBuf, RECT, SIZE): if(SIZE < 1): return None retBuf = pygame.transform.scale(tBuf, tBuf.get_size()) for j in range(RECT.top, RECT.bottom, SIZE): for i in range(RECT.left, RECT.right, SIZE): colorSum = 0, 0, 0 for b in range(SIZE): for a in range(SIZE): rgba = tBuf.get_at((i+a, j+b)) colorSum = ( colorSum[0] + rgba[0], colorSum[1] + rgba[1], colorSum[2] + rgba[2]) colorSum = ( colorSum[0] / ((SIZE)**2), colorSum[1] / ((SIZE)**2), colorSum[2] / ((SIZE)**2), 255) for b in range(SIZE): for a in range(SIZE): retBuf.set_at((i+a, j+b), colorSum) return retBuf # Main def main(): pygame.init() pygame.display.set_mode((250, 250), 0, 32) pygame.display.set_caption("モザイク") _gScr = pygame.display.get_surface() tBuf = pygame.image.load("nyan.bmp").convert() i = 1 while True: dstBuf = transMosaic(tBuf, pygame.Rect(50, 50, 100, 100), i) i += 1 if(i > 50): i = 1 _gScr.blit(dstBuf, (0, 0), dstBuf.get_rect()) pygame.display.update() for e in pygame.event.get(): if e.type == pygame.QUIT: return pygame.time.wait(10) if __name__ == '__main__': main()