Python图片拼贴程序报错:Inappropriate argument value(类型正确)求助
图片拼贴画代码报错排查求助
我正在完成一门课程作业,需使用三张图片创建拼贴画。运行程序时出现错误提示:
Inappropriate argument value (of correct type). An error occurred attempting to pass an argument to a function. Please check line 26
疑惑的是,第26行代码写法与上方另一张图片的处理代码完全相同,但该行并未报错,希望得到问题排查帮助。以下是我的代码:
def createCollage(): fileName1 = pickAFile() src1= makePicture(fileName1) print(src1) filename2= pickAFile() src2=makePicture(filename2) print(src2) filename3=pickAFile() src3=makePicture(filename3) print (src3) canvas=makeEmptyPicture(1300,1000) print canvas targetX=0 for sourceX in range(0,getWidth(src3)): targetY=100 for sourceY in range(0,getHeight(src3)): color=getColor(getPixel(src3,sourceX,sourceY)) setColor(getPixel(canvas,targetX,targetY), color) targetY=targetY+1 targetX=targetX+1 targetX=650 for sourceX in range(0,getWidth(src1)-100): targetY= 300 for sourceY in range(0,getHeight(src1)-50): color=getColor(getPixel(src1,sourceX,sourceY)) setColor(getPixel(canvas,targetX,targetY), color) targetY=targetY+1 targetX=targetX+1 targetX=600 for sourceX in range(0,getWidth(src2)): targetY=430 for sourceY in range(150,getHeight(src2)): color=getColor(getPixel(src2,sourceX,sourceY)) setColor(getPixel(canvas,targetX,targetY), color) targetY=targetY+1 targetX=targetX+1 targetX=10 for sourceX in range(20,getWidth(src2)-100): targetY=270 for sourceY in range(0,getHeight(src2)-50): color=getColor(getPixel(src2,sourceX,sourceY)) setColor(getPixel(canvas,targetX,targetY), color) targetY=targetY+1 targetX=targetX+1 targetX=50 for sourceX in range(0,getWidth(src1)): targetY= 430 for sourceY in range(120,getHeight(src1)): color=getColor(getPixel(src1,sourceX,sourceY)) setColor(getPixel(canvas,targetX,targetY), color) targetY=targetY+1 targetX=targetX+1 show(src1) show(src2) show(src3) show(canvas) return canvas writePictureTo(canvas,("C:/Temp Python/CollagePic.png")) createCollage()
排查方向与解决建议
1. 画布坐标越界(最可能原因)
第26行是处理src1的setColor调用,报错核心是targetX或targetY超出了画布canvas的有效坐标范围:
- 画布宽度1300,有效X坐标范围为
0~1299;高度1000,有效Y坐标范围为0~999。 - 若
getWidth(src1)-100数值过大,加上起始targetX=650后,最终targetX会超过1299;同理getHeight(src1)-50加上起始targetY=300后,可能超过999。
验证方法:在第22行前添加打印语句,查看关键数值:
print("src1宽度:", getWidth(src1), "最终targetX:", 650 + (getWidth(src1)-100)) print("src1高度:", getHeight(src1), "最终targetY:", 300 + (getHeight(src1)-50)) print("画布宽高:", getWidth(canvas), getHeight(canvas))
修复方法:修改循环范围,确保坐标不越界:
# 限制X方向不超出画布 max_sourceX = min(getWidth(src1)-100, getWidth(canvas) - targetX) for sourceX in range(0, max_sourceX): targetY= 300 # 限制Y方向不超出画布 max_sourceY = min(getHeight(src1)-50, getHeight(canvas) - targetY) for sourceY in range(0, max_sourceY): color=getColor(getPixel(src1,sourceX,sourceY)) setColor(getPixel(canvas,targetX,targetY), color) targetY=targetY+1 targetX=targetX+1
2. 循环范围逻辑错误
如果src1宽度小于100,getWidth(src1)-100会得到负数,此时range(0, 负数)不会生成有效循环,可添加判断避免异常:
if getWidth(src1) >= 100 and getHeight(src1) >=50: targetX=650 for sourceX in range(0,getWidth(src1)-100): # 原循环代码 else: print("src1尺寸过小,无法执行该段裁剪")
3. 额外bug:return语句位置错误
代码中return canvas在writePictureTo之前,会导致保存图片的代码永远不会执行,需调整顺序:
show(canvas) writePictureTo(canvas, "C:/Temp Python/CollagePic.png") return canvas
内容的提问来源于stack exchange,提问作者M Agrippa
相关产品推荐
相关产品推荐

