Pyglet.image.ImageGrid() - 从左上角开始索引
Pyglet.image.ImageGrid() - indexing from top left
那里。
使用 pyglet.image.ImageGrid(),有没有什么方法可以从左上而不是左下开始网格?
所以,我目前唯一的 'awfull' 解决方案是:
- 垂直翻转驱动器上的图像
- 将图像作为纹理加载并使用 get_texture()
将其翻转回来
- 将其放入 ImageGrid()
- Reverse() ImageGrid 序列
这个问题已有 4 年历史,但由于它是 Google 上的最佳结果之一,我想我应该分享我的答案:
def reverse_rows(grid, columns):
# split the grid into rows
temp = [grid[i:i + int(columns)] for i in range(0, len(grid), int(columns))]
temp.reverse() # reverse the order of the rows
reversed = []
for grid in temp: # reassemble the list
reversed += grid
return reversed # and return the reversed list
请注意,此 returns 纹理列表,而不是 ImageGrid
或 TextureGrid
,因此您可能会失去一些功能。
您可以使用这个 FlippedImageGrid class。归功于咖啡因丸
import pyglet
class TopLeftTextureGrid(pyglet.image.TextureGrid):
def __init__(self, grid):
image = grid.get_texture()
if isinstance(image, TextureRegion):
owner = image.owner
else:
owner = image
super(TextureGrid, self).__init__(
image.x, image.y, image.z, image.width, image.height, owner
)
items = []
y = image.height - grid.item_height
for row in range(grid.rows):
x = 0
for col in range(grid.columns):
items.append(
self.get_region(x, y, grid.item_width, grid.item_height)
)
x += grid.item_width + grid.column_padding
y -= grid.item_height + grid.row_padding
self.items = items
self.rows = grid.rows
self.columns = grid.columns
self.item_width = grid.item_width
self.item_height = grid.item_height
class FlippedImageGrid(pyglet.image.ImageGrid):
def _update_items(self):
if not self._items:
self._items = []
y = self.image.height - self.item_height
for row in range(self.rows):
x = 0
for col in range(self.columns):
self._items.append(
self.image.get_region(
x, y, self.item_width, self.item_height
)
)
x += self.item_width + self.column_padding
y -= self.item_height + self.row_padding
def get_texture_sequence(self):
if not self._texture_grid:
self._texture_grid = TopLeftTextureGrid(self)
return self._texture_grid
那里。
使用 pyglet.image.ImageGrid(),有没有什么方法可以从左上而不是左下开始网格?
所以,我目前唯一的 'awfull' 解决方案是:
- 垂直翻转驱动器上的图像
- 将图像作为纹理加载并使用 get_texture() 将其翻转回来
- 将其放入 ImageGrid()
- Reverse() ImageGrid 序列
这个问题已有 4 年历史,但由于它是 Google 上的最佳结果之一,我想我应该分享我的答案:
def reverse_rows(grid, columns):
# split the grid into rows
temp = [grid[i:i + int(columns)] for i in range(0, len(grid), int(columns))]
temp.reverse() # reverse the order of the rows
reversed = []
for grid in temp: # reassemble the list
reversed += grid
return reversed # and return the reversed list
请注意,此 returns 纹理列表,而不是 ImageGrid
或 TextureGrid
,因此您可能会失去一些功能。
您可以使用这个 FlippedImageGrid class。归功于咖啡因丸
import pyglet
class TopLeftTextureGrid(pyglet.image.TextureGrid):
def __init__(self, grid):
image = grid.get_texture()
if isinstance(image, TextureRegion):
owner = image.owner
else:
owner = image
super(TextureGrid, self).__init__(
image.x, image.y, image.z, image.width, image.height, owner
)
items = []
y = image.height - grid.item_height
for row in range(grid.rows):
x = 0
for col in range(grid.columns):
items.append(
self.get_region(x, y, grid.item_width, grid.item_height)
)
x += grid.item_width + grid.column_padding
y -= grid.item_height + grid.row_padding
self.items = items
self.rows = grid.rows
self.columns = grid.columns
self.item_width = grid.item_width
self.item_height = grid.item_height
class FlippedImageGrid(pyglet.image.ImageGrid):
def _update_items(self):
if not self._items:
self._items = []
y = self.image.height - self.item_height
for row in range(self.rows):
x = 0
for col in range(self.columns):
self._items.append(
self.image.get_region(
x, y, self.item_width, self.item_height
)
)
x += self.item_width + self.column_padding
y -= self.item_height + self.row_padding
def get_texture_sequence(self):
if not self._texture_grid:
self._texture_grid = TopLeftTextureGrid(self)
return self._texture_grid