Python基于pygame实现点彩画效果的随机化算法开发求助
注:此为学校相关作业,我不寻求直接答案,仅希望获得算法构思方面的支持,这是我首次接触这类问题
程序预期用途
接收命令行传入的图像,将其放大5倍,利用原图像的RGB值以随机方式重建图像。
已尝试的算法思路
- 测试图像尺寸为250x250,放大后为1250x1250。我尝试将放大后的图像划分为50x50的区块(原图像单像素对应放大后的区块尺寸),然后用(r+g+b)/5个圆点生成对应颜色。示例:颜色值为(100,50,5)时,在50x50区块内绘制20个红色圆点、10个绿色圆点、1个蓝色圆点,(100+50+5)/5=31,与20+10+1=31数量一致,圆点在50x50区块内的x、y坐标需随机生成。
当前遇到的问题
无法将上述算法思路转化为可运行代码。
第一次代码尝试
暂未关联上述算法,仅尝试使用要求的pygame.draw.circle方法绘制图像,代码如下:
import pygame import sys import random image_name = sys.argv[1] #Import Image src_image = pygame.image.load(image_name) (w,h) = src_image.get_size() window = pygame.display.set_mode((w*5,h*5)) #Nested Loop To Iterate Through Rows And Columns Of Pixels for y in range(h): for x in range(w): (r,g,b,_) = src_image.get_at((x,y)) print(f"{r},{g},{b},x:{x},y:{y}") pygame.draw.circle(window,(r,g,b),(x*5,y*5),2) pygame.display.update() pygame.time.delay(5000)
算法构思参考
你已经完成了遍历原图像像素的基础逻辑,只需要在单像素的处理部分替换为你设计的圆点生成逻辑即可,核心拆分步骤:
- 先修正画布尺寸设置:原图像宽高为w/h,每个像素对应50x50的区块,所以画布尺寸应该设置为
(w*50, h*50),和你思路里的区块大小匹配 - 确定单像素对应区块的坐标范围:原像素坐标为(x,y)时,对应放大后区块的x轴取值范围是
[x*50, x*50 + 49],y轴取值范围是[y*50, y*50 + 49] - 计算各颜色圆点数量:分别用r、g、b的数值除以5取整,得到红色、绿色、蓝色圆点各自需要绘制的数量
- 分颜色循环绘制圆点:对每种颜色,循环对应次数,每次在上述区块范围内生成随机x、y坐标,调用
pygame.draw.circle绘制对应颜色的圆点即可 - 若需要优化显示效果,可以调整圆点半径,或者增加坐标去重逻辑避免圆点重叠,基础实现不需要做额外处理也能达到预期效果
内容的提问来源于stack exchange,提问作者Grewal_Creator
相关产品推荐
相关产品推荐

