从Pyglet中的图像快速获取alpha通道数据

2024-04-20 11:56:18 发布

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

我尝试使用Pyglet库获得一个具有精灵图像alpha通道值的数组。 我写了这样一个代码:

mask = []
for x in range(image.width):
    mask.append([])
    for y in range(image.height):
        mask[x].append(ord(image.get_region(x, y, 1, 1).get_image_data().get_data("RGBA", 4)[3]))
return mask

唯一的问题是它真的很慢,我猜我用了一个错误的函数来检索alpha通道。我能做些什么来加快速度?在

更新

我用以下代码找到了一个更快的解决方案:

^{pr2}$

Tags: 代码in图像imagealphafordataget
1条回答
网友
1楼 · 发布于 2024-04-20 11:56:18

我不知道pyglet,但我猜性能问题与许多只针对单个像素的查询有关。相反,你只需要一次调用就可以从GPU获得整个图像,包括颜色和alpha值,然后只提取alpha。我还将使用^{}而不是ord()。在

注意:此代码未经测试,完全基于问题中的示例。也许还有更好的方法。

from struct import unpack
...
region = image.get_region(0, 0, image.width, image.height)
packed_data = region.get_image_data().get_data("RGBA", 4)
data = unpack("%iB" % (4 * image.width * image.height), packed_data)
mask = data[3::4]

我不认为这是值得的,但如果你真的不想把颜色从GPU拖回来,你可以先研究复制alpha到另一个纹理(甚至有一种方法可以让GL将其解压为格式转换或重新解释)。在

相关问题 更多 >