使用 Jython 将两张图片混合在一起
Blending two pictures together using Jython
我正在尝试将 2 张图片混合在一起,但每次 运行 我都会收到错误消息:
getPixel(picture,x,y): x (= 310) is less than 0 or bigger than the width (= 309)
错误值为:
Inappropriate argument value (of correct type).
An error occurred attempting to pass an argument to a function.
Please check line 18
我已经多次调整图像的大小,看看是否可行,但还是不行。任何帮助都会很棒。
截至目前,我的照片尺寸如下:
羚羊=310x369
鹿角兔=250x341
def blendPictures(): #define a new function
Pic1=makePicture(pickAFile()) #Pick Pic1 Antelope(Barb)
Pic2=makePicture(pickAFile()) #Pick Pic2 Jackalope(Katie)
canvas=makeEmptyPicture(640,480) #Create an empty picture file
sourceX=0
for targetX in range(0,150): #Let's ad our first loop
sourceY=0
for targetY in range(0,getHeight(Pic1)):
color = getColor(getPixel(Pic1,sourceX,sourceY))
setColor(getPixel(canvas,targetX,targetY),color)
sourceY = sourceY + 1
sourceX = sourceX +1
overlap = getWidth(Pic1)-150
sourceX=0
for targetX in range(150,getHeight(Pic1)):
sourceY=0
for targetY in range(0,getHeight(Pic2)):
APixel = getPixel(Pic1,sourceX+150,sourceY)
BPixel = getPixel(Pic2,sourceX,sourceY)
newRed=0.50*getRed(APixel)+0.50*getRed(BPixel)
newGreen=0.50*getGreen(APixel)+0.50*getGreen(BPixel)
newBlue=0.50*getBlue(APixel)+0.50*getBlue(BPixel)
color=makeColor(newRed,newGreen,newBlue)
setColor(getPixel(canvas,targetX,targetY),color)
sourceY=sourceY+1
sourceX=sourceX+1
sourceX=overlap
for targetX in range(150+overlap,150+getWidth(Pic2)):
sourceY=0
for targetY in range(0,getHeight(Pic2)):
color=getColor(getPixel(Pic2,sourceX,sourceY))
setColor(getPixel(canvas,targetX,targetY),color)
sourceY=sourceY+1
sourceX=sourceX+1
show(canvas)
return canvas
我不确定你想做什么,
但一个明显的问题是您的第二个循环部分:
for targetX in range(150, getHeight(Pic1)):
这应该是:
for targetX in range(150, getWidth(Pic1)):
否则,你在x方向循环219次(369-150),
这将导致行中提到的错误:
APixel = getPixel(Pic1, sourceX+150, sourceY)
因为在 219 的第 160 次迭代中,代码将尝试 getPixel(Pic1, 310, 0)
,这是越界的。
我正在尝试将 2 张图片混合在一起,但每次 运行 我都会收到错误消息:
getPixel(picture,x,y): x (= 310) is less than 0 or bigger than the width (= 309)
错误值为:
Inappropriate argument value (of correct type).
An error occurred attempting to pass an argument to a function.
Please check line 18
我已经多次调整图像的大小,看看是否可行,但还是不行。任何帮助都会很棒。
截至目前,我的照片尺寸如下:
羚羊=310x369
鹿角兔=250x341
def blendPictures(): #define a new function
Pic1=makePicture(pickAFile()) #Pick Pic1 Antelope(Barb)
Pic2=makePicture(pickAFile()) #Pick Pic2 Jackalope(Katie)
canvas=makeEmptyPicture(640,480) #Create an empty picture file
sourceX=0
for targetX in range(0,150): #Let's ad our first loop
sourceY=0
for targetY in range(0,getHeight(Pic1)):
color = getColor(getPixel(Pic1,sourceX,sourceY))
setColor(getPixel(canvas,targetX,targetY),color)
sourceY = sourceY + 1
sourceX = sourceX +1
overlap = getWidth(Pic1)-150
sourceX=0
for targetX in range(150,getHeight(Pic1)):
sourceY=0
for targetY in range(0,getHeight(Pic2)):
APixel = getPixel(Pic1,sourceX+150,sourceY)
BPixel = getPixel(Pic2,sourceX,sourceY)
newRed=0.50*getRed(APixel)+0.50*getRed(BPixel)
newGreen=0.50*getGreen(APixel)+0.50*getGreen(BPixel)
newBlue=0.50*getBlue(APixel)+0.50*getBlue(BPixel)
color=makeColor(newRed,newGreen,newBlue)
setColor(getPixel(canvas,targetX,targetY),color)
sourceY=sourceY+1
sourceX=sourceX+1
sourceX=overlap
for targetX in range(150+overlap,150+getWidth(Pic2)):
sourceY=0
for targetY in range(0,getHeight(Pic2)):
color=getColor(getPixel(Pic2,sourceX,sourceY))
setColor(getPixel(canvas,targetX,targetY),color)
sourceY=sourceY+1
sourceX=sourceX+1
show(canvas)
return canvas
我不确定你想做什么, 但一个明显的问题是您的第二个循环部分:
for targetX in range(150, getHeight(Pic1)):
这应该是:
for targetX in range(150, getWidth(Pic1)):
否则,你在x方向循环219次(369-150), 这将导致行中提到的错误:
APixel = getPixel(Pic1, sourceX+150, sourceY)
因为在 219 的第 160 次迭代中,代码将尝试 getPixel(Pic1, 310, 0)
,这是越界的。