gpt4 book ai didi

python - 如何将彩色图显示为从数组实时生成的 pygame 表面?

转载 作者:行者123 更新时间:2023-12-01 05:00:21 28 4
gpt4 key购买 nike

我的目标是在 pygame 实例内显示一个颜色图,以 49 个元素 ndarray 的形式反射(reflect)实时输入,范围从 -6 到 2,标准化为 0 到 1 的值。到目前为止,我正在使用 matplotlib 创建 map ,并使用后端将其转换为 RGB 字符串,最终获得我的 pygame 表面。我的主要问题是显示速度非常慢(大约 1 fps),因此我决定直接生成此 map 作为 pygame 表面,但我正在努力寻找令人满意的显示。

如何从数组实时生成 pygame 表面并将其缩放到合理的大小以获得接近 matplotlib 的显示效果?

最佳答案

事实上,您可以使用 pygame 渲染数组。我不知道什么是 matplotlib 以及您需要执行哪些计算,所以我回答最后两个问题。要缩放 Surface,请使用 pygame.transform.scale 函数(请参阅文档)。至于数组渲染,简单来说,您当然需要安装 Numpy 和 pygame 库。然后您决定数据的去向和内容。通常在表面上有颜色 channel - 红绿蓝和 Alpha(如果使用透明度)。您应该在那里写入您的数据。请参阅下面的示例,它只是将矩形放入 channel 数组中并将其绘制到屏幕上(仅一次,没有任何更改)。

import numpy, pygame
from pygame.locals import *

# byte packing function
def Pack4bytes(c1,c2,c3,c4) :
result = c1 << 24 | c2 << 16 | c3 << 8 | c4
return result

#Initialise display and empty array
width = 200
height = 100
pygame.init()
DISP = pygame.display.set_mode((width, height))
Sample = numpy.zeros((width, height), dtype = numpy.uint32)
Output = numpy.zeros_like(Sample)

#Initialise color channels
A = numpy.zeros_like(Sample)
R = numpy.zeros_like(Sample)
G = numpy.zeros_like(Sample)
B = numpy.zeros_like(Sample)

def Render() :
# for example, fill the channels with some data
# note the index order - pygame treats array as transposed matrix
# first index refers to X , second - to Y coordinate
R[:, 20:30] = 127
G[:, 40:50] = 127
B[:, 60:70] = 127

# Now pack data and blit
# Note byte order - in pygame it is exactly as follows - ARGB
Output = Pack4bytes(A,R,G,B)
# blit Output to display, this one is for output same size as display
pygame.surfarray.blit_array(DISP, Output)

MyLoop = True
FPS = 8
clock = pygame.time.Clock( )
Render()
# empty loop, just does nothing
while MyLoop:
clock.tick(FPS)
for event in pygame.event.get( ):
if event.type == QUIT: MyLoop = False
if event.type == KEYDOWN:
if event.key == K_ESCAPE: MyLoop = False
pygame.display.update( )
pygame.quit( )

仔细阅读Render函数中的注释,非常重要。因此,如果您需要变化的图片,只需将 Render() 的调用放在循环内,并在函数体中定义要执行的计算即可。此示例仅适用于 RGB,因此 Alpha 将被忽略。使用 Python 2.6.6 和 Numpy 1.5.1 进行测试

关于python - 如何将彩色图显示为从数组实时生成的 pygame 表面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26357200/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com