JES收缩算法不起作用

时间:2014-03-03 07:30:22

标签: python algorithm jython jes

我正在尝试编写一个简单的算法来将图片的大小减半,这似乎对我有意义,但我可能在这里遗漏了一些明显的东西,并且想知道是否有人能指出我正确的方向。

a = pickAFile()
b = makePicture(a)
c = getWidth(b)
d = getHeight(b)
e = (c * 3) / 4
f = (d * 3) / 4
canvas = makeEmptyPicture(e,f)
sourceX = 1
for targetX in range (1, c):
  sourceY = 1
  for targetY in range (1, d):
    color = getColor(getPixel(b, sourceX, sourceY))
    setColor(getPixel(canvas, targetX, targetY), color)
    sourceY = sourceY + 2
    sourceX = sourceX + 2
show(canvas)
show(b)

编辑:当我尝试像现在一样运行它时,我得到for循环的索引超出范围错误。

1 个答案:

答案 0 :(得分:0)

首先,画布的尺寸应该是原始图像的一半。所以你应该改变

e = (c * 3) / 4
f = (d * 3) / 4

e = c / 2
f = d / 2

其次,for循环意味着从新图像的第一个像素迭代到最后一个像素。请更改以下

for targetX in range (1, c):

for targetX in range (1, e):

for targetY in range (1, d):

for targetY in range (1, f):

下一个问题是你在内部for循环中增加变量sourceX。您需要更改此行代码的缩进,以使其成为外部for循环的一部分

完整的代码应如下所示

a = pickAFile()
b = makePicture(a)
c = getWidth(b)
d = getHeight(b)
e = c / 2
f = d / 2
canvas = makeEmptyPicture(e,f)
sourceX = 1
for targetX in range (1, e):
  sourceY = 1
  for targetY in range (1, f):
    color = getColor(getPixel(b, sourceX, sourceY))
    setColor(getPixel(canvas, targetX, targetY), color)
    sourceY = sourceY + 2
  sourceX = sourceX + 2
show(canvas)
show(b)

我建议的最后一件事是为变量选择更有意义的名称。分别命名c和e,sourceWidth和targetWidth可以帮助您更轻松地识别for循环的问题。它也会花费你更少的时间来输入一些额外的密钥,然后花费时间来尝试在代码中找到问题。