我正在尝试编写一个python函数,它将从图片上的任何位置复制三角形区域到新的空白图片。我可以将图片中的矩形区域复制到新的空白图片,但我不知道如何复制三角形。这就是我所拥有的,但它只复制一个矩形区域。很抱歉,如果它看起来很乱或过于复杂,但我刚开始如何用python编写。
def copyTriangle():
file=pickAFile()
oldPic=makePicture(file)
newPic=makeEmptyPicture(getWidth(oldPic),getHeight(oldPic))
xstart=getWidth(oldPic)/2
ystart=getHeight(oldPic)/2
for y in range(ystart,getHeight(oldPic)):
for x in range(xstart,getWidth(oldPic)):
oldPixel=getPixel(oldPic,x,y)
colour=getColor(oldPixel)
newPixel=getPixel(newPic,x,y)
setColor(newPixel,colour)
答案 0 :(得分:5)
将三角形区域从一张图片复制到另一张图片的功能。
def selectTriangle(pic):
w= getWidth (pic)
h = getHeight(pic)
newPic = makeEmptyPicture(w,h)
x0=107#test point 0
y0=44
x1=52#test point 1
y1=177
x2=273 #test point 2
y2=216
#(y-y0)/(y1-y0)=(x-x0)/(x1-x0)
for y in range (0,h):
for x in range (0, w):
#finding pixels within the plotted lines between eat set of points
if (x>((y-y0)*(x1-x0)/(y1-y0)+x0) and x<((y-y0)*(x2-x0)/(y2-y0)+x0) and x>((y-y2)*(x1-x2)/(y1-y2)+x2)):
pxl = getPixel(pic, x, y)
newPxl= getPixel(newPic,x,y)
color = getColor(pxl)
setColor (newPxl, color)
return (newPic)
答案 1 :(得分:2)
如果你愿意像你的例子一样逐像素地做,那么只需复制三角形的像素。这主要取决于你想要如何定义三角形。
最简单的三角形是使你的x范围(内环)取决于你的y值(外环),如:
for y in range(ystart, ystart+getHeight(oldPic)):
for x in range(xstart, xstart + int( getWidth(oldPic)*((y-ystart)/float(getHeight)):
更一般地说,你仍然可以保持相同的x和y循环,然后将复制命令放在if
块中,在那里检查点是否在你的三角形中。
除此之外,还有更有效的方法,使用面具等。
注意,在这里我也将y范围更改为range(ystart, ystart+getHeight(oldPic))
,我认为这可能是你想要的高度并不取决于起始位置。