一位开发者在 Stack Overflow 上寻求一个简单图形库,满足以下功能要求:
- 绘制多边形(不限于矩形)及具有 RGBA 颜色(即支持透明的部分)
- 加载位图图像
- 能够读取给定坐标的像素的当前颜色
该开发者偏好使用 JavaScript 或 Python,并且已经发现 HTML 5 Canvas 可以满足第二个和第三个要求,但无法满足第一个要求,而 SVG 可以满足第一个和第二个要求,但无法满足第三个要求。
2、解决方法
在 Stack Overflow 上,有几位开发者提供了可能的解决方案:
- 一位开发者推荐使用 PyGame,因为它可以满足所有的功能要求,但它可能无法很好地嵌入到 GUI 中。
- 另一位开发者最终选择了 Canvas,并透露多边形的“秘密”在于使用路径。
- 还有人推荐使用 GameJs,它是一个功能更强大的 PyGame 式库,能够满足所有要求,并提供了详细的文档链接。
其中,第一个答案的代码示例如下:
import pygame
# 初始化 PyGame。
pygame.init()
# 创建一个游戏窗口。
screen = pygame.display.set_mode((640, 480))
# 设置多边形顶点。
points = [(100, 100), (200, 150), (300, 100), (200, 50)]
# 绘制多边形。
pygame.draw.polygon(screen, (255, 0, 0, 128), points, 0)
# 加载位图图像。
image = pygame.image.load("my_image.png")
# 将图像绘制到屏幕上。
screen.blit(image, (0, 0))
# 获取指定坐标的像素颜色。
color = screen.get_at((100, 100))
# 等待用户输入。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 更新显示。
pygame.display.update()
第二个答案的代码示例如下:
import pygame
# 初始化 PyGame。
pygame.init()
# 创建一个游戏窗口。
screen = pygame.display.set_mode((640, 480))
# 创建一个路径。
path = pygame.Path()
# 添加多边形顶点到路径。
path.add_polygon([(100, 100), (200, 150), (300, 100), (200, 50)])
# 设置路径的颜色。
path.set_color((255, 0, 0, 128))
# 将路径绘制到屏幕上。
pygame.draw.path(screen, path, 0)
# 加载位图图像。
image = pygame.image.load("my_image.png")
# 将图像绘制到屏幕上。
screen.blit(image, (0, 0))
# 获取指定坐标的像素颜色。
color = screen.get_at((100, 100))
# 等待用户输入。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 更新显示。
pygame.display.update()
第三个答案的代码示例如下:
import gamejs
# 初始化 GameJs。
gamejs.init()
# 创建一个游戏窗口。
screen = gamejs.display.get_surface()
# 创建一个多边形。
polygon = gamejs.draw.polygon((255, 0, 0, 128), [(100, 100), (200, 150), (300, 100), (200, 50)])
# 将多边形绘制到屏幕上。
screen.blit(polygon)
# 加载位图图像。
image = gamejs.image.load("my_image.png")
# 将图像绘制到屏幕上。
screen.blit(image, (0, 0))
# 获取指定坐标的像素颜色。
color = screen.get_at((100, 100))
# 等待用户输入。
while True:
for event in gamejs.event.get():
if event.type == gamejs.QUIT:
gamejs.quit()
sys.exit()
# 更新显示。
gamejs.display.update()