我使用PyGame的图形库在LED显示屏上显示图形。
我的LED显示屏是25x7。对于没有硬件的测试,我已经能够使用PyGame的display
来查看40倍放大版本:
screen = pygame.display.set_mode((1000,280))
我想在25x7网格上实际绘制盒子,镜像等,然后将其投影到我的计算机上的一个更大的1000x280窗口上,这个窗口看起来像一个25x7网格的40x40"像素&#34 ;。这样,如果我开始使用硬件,我可以跳过大型投影,只需将25x7 = 175像素的数据写入我的LED。
我想出了一个解决方案,但速度过于缓慢:
xDim = 25
yDim = 7
pixelMultiplier = 40
surf = pygame.Surface((xDim,yDim))
bigSurf = pygame.Surface((pixelMultiplier*xDim,pixelMultiplier*yDim))
# ... manipulate surf ...
# map surf to bigSurf
for x in range(xDim):
for y in range(yDim):
# grab color of pixel
tmpColor = surf.get_at((x,y))
# write to all pixels in larger surface
for i in range(pixelMultiplier):
for j in range(pixelMultiplier):
bigSurf.set_at((pixelMultiplier*x+i,pixelMultiplier*y+j),tmpColor)
是否有一些内置的PyGame功能可以有效地完成这项工作?
答案 0 :(得分:0)
写完这篇文章后,我突然明白了:
创建一个表面来表示像素,只需blit
表示更大的表面。不是为所有175个像素运行1600 set_at()
个函数,而是使用内置函数执行此操作。
# map surf to larger version
for x in range(xDim):
for y in range(yDim):
# grab color of pixel
tmpColor = surf.get_at((x,y))
# create square surface to represent pixel
pixelSurf = pygame.Surface((pixelMultiplier,pixelMultiplier))
pixelSurf.fill(tmpColor)
# blit big pixel onto bigSurf
bigSurf.blit(pixelSurf,(pixelMultiplier*x,pixelMultiplier*y))
这样可以更快地运行 ,但我仍然不确定它是否是最佳解决方案。
编辑 - 最佳方法
PyGame确实有内置功能!
pygame.transform.scale(surface,(newX,newY))