I'm writing a code in Jython, that will copy part of one picture into an empty picture, but I want it to copy (let's say) 10 pixels less with each next row. I don't think I make sense, let me explain with an example. A picture 100 pixels by 100 pixels, the program will copy the first row (100pixels) of pixels into the new picture, but for second row of pixels I want it to copy only 90 pixels, then for the third row 80 pixels, and so on.
Here I have a code that will copy part of a picture, but it copies a square. So what should I add to make it do what I want. I'm guessing I'm supposed to do something with the for x in range
but I don't know what.
def copyPic():
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)
explore(newPic)
Your code definitely looks like it will copy the bottom right 1/4 of the image... to make a triangle-shaped piece (or just a piece that has an angle if I understand your question properly) of that section you need to reduce the X maximum value each time through... something like:
def copyPic():
file=pickAFile()
oldPic=makePicture(file)
newPic=makeEmptyPicture(getWidth(oldPic),getHeight(oldPic))
xstart=getWidth(oldPic)/2
ystart=getHeight(oldPic)/2
# The next line gets the max value x can be (width of pic)
xmax = getWidth(oldPic)
for y in range(ystart,getHeight(oldPic)):
# Now loop from the middle (xstart) to the end (xmax)
for x in range(xstart, xmax):
oldPixel=getPixel(oldPic,x,y)
colour=getColor(oldPixel)
newPixel=getPixel(newPic,x,y)
setColor(newPixel,colour)
# Now the x-loop has finished for this line (this value of y)
# so reduce xmax by 10 (or whatever value) ready for the next line
xmax = xmax - 10
# Then you should do some checking in your code to ensure
# xmax is not < xstart... here is something crude that should work
if xmax < xstart:
xmax = xstart
explore(newPic)
Your code I think will take an image like this:
+------------+
| 1 2 |
| |
| 3 4 |
| |
+------------+
and give this:
+-----+
| 4 |
| |
+-----+
because your X loop is always the same length
By reducing x each time as shown, you should get something like this:
+-----+
| 4 /
| /
+-
This is not very well coded, and I could rewrite the whole thing... but if you are just learning python then at least the modifications I made to your code should work well with what you already have, and should be easy to follow. I hope that it helps, and feel free to ask for clarification if you need it.
Cheers
PS: I see you asked this twice - you shouldn't ask the same question twice since it splits the answers, and makes it harder for people trying to find answers like this later on...