Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速从Pyglet中的图像获取alpha通道数据_Python_Python 2.7_Opengl_Pyglet - Fatal编程技术网

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

Python 快速从Pyglet中的图像获取alpha通道数据,python,python-2.7,opengl,pyglet,Python,Python 2.7,Opengl,Pyglet,我正在尝试使用Pyglet库获取一个具有sprite图像的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]))

我正在尝试使用Pyglet库获取一个具有sprite图像的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通道。我能做些什么使它更快

更新

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

rawimage = image.get_image_data()
format = 'RGBA'
pitch = rawimage.width * len(format)
pixels = rawimage.get_data(format, pitch)

data = unpack("%iB" % (4 * image.width * image.height), pixels)
mask = data[3::4]
return mask

我不知道pyglet,但我猜性能问题与许多只针对单个像素的查询有关。相反,您希望在一次调用中从GPU获取整个图像,包括颜色和alpha值,然后仅提取alpha值。我还将使用而不是
ord()

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


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

非常感谢你为我指出了正确的方向,我在原始帖子中添加了正确的代码
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]