在PyGam中将小曲面映射到大曲面

2024-04-24 06:09:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我用PyGame的图形库在LED显示屏上显示图形。你知道吗

我的LED显示屏是25x7。对于没有硬件的测试,我可以使用PyGame的display来查看40x放大版:

screen = pygame.display.set_mode((1000,280))

我想在25x7网格上绘制长方体、矩形等,然后将其投影到我电脑上一个更大的1000x280窗口上,这个窗口看起来像一个40x40像素的25x7网格。这样,如果我开始使用硬件,我就可以跳过大的投影,只需将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函数可以有效地实现这一点?你知道吗


Tags: inforled硬件displayrangepygamesurf
1条回答
网友
1楼 · 发布于 2024-04-24 06:09:08

写了这篇文章之后,我突然意识到:

创建一个表示像素的曲面,然后将它转换为更大的曲面。不要对所有175个像素运行1600set_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))

相关问题 更多 >