我的最终目标是在图像中找到一种颜色(在这种情况下为白色),然后将其替换为另一种颜色(根据特定情况)。因此,随着特定变量的变化,白色将替换为特定的颜色。但是,要到达那里,我目前只是在玩图像(使用教程..etc)。我正在尝试使用以下代码来打印图像的调色板。我的理解是颜色是代表RGB的3个整数的“元组”。0 =最暗,255 =白色。因此,我正在测试的图像是黑白图像。我期望像“(0,0,0),(255,255,255)”之类的东西。因此,我想出了办法,可以编写代码用适当的颜色替换“(255,255,255)”。我提到了最终目标,因为我非常了解我的方法可能不是最好的方法,也许有人可以通过更好的方法来解决这个问题。如果没有,我至少希望能够打印一个引用图像包含的颜色的字符串。我在此站点上发现了“ NOFRAME”,这是一个很好的建议,因为我实际上并不是在“使用”图像/图形,而只是使用它们的属性。image1=r"C:\Python27\Lib\site-packages\pygame\examples\data\image1.jpg"image2=r"C:\Python27\Lib\site-packages\pygame\examples\data\image2.png"import pygame, sysfrom pygame.locals import *pygame.init()pygame.display.set_mode((1,1), pygame.NOFRAME)background = pygame.image.load(image1).convert()mouse_c=pygame.image.load(image2).convert_alpha()colorpal = pygame.Surface.get_palette(mouse_c)print colorpal
2 回答

慕田峪4524236
TA贡献1875条经验 获得超5个赞
您想要做的是需要大量像素级的工作,因此,我建议您使用一个pygame.PixelArray
对象直接对表面进行像素访问。
对于您特别想做的事情,听起来可以使用该pygame.PixelArray.replace()
方法。

慕盖茨4494581
TA贡献1850条经验 获得超11个赞
您可以使用get_at
Pygame曲面的方法获得图像曲面上的单个像素-如中所述mouse_c.get_at((0,0))
。
严格来说,这是您所要的-但它无法满足任何现实世界的需求,这是非常极端的,我要说的是,处理这样的图像的所有像素非常慢。
您可以使用图像缓冲区get_buffer
并在那里解释数据,原始数据,或者将缓冲区传递给用本机代码编写的函数以提高速度。
不过,如果您的目标是实时用另一种颜色替换颜色,则可以诉诸使用索引图像-这样,每个图像都会有一个颜色表,您只需将颜色编号修改10
为0,0,255
,并在渲染时图像,该颜色的所有出现都变为蓝色。这是快速的-效率不及硬件完成的8位视频游戏时代-但这将使您尝试在纯Python代码中进行的任何替换都快几个数量级。
添加回答
举报
0/150
提交
取消