我正在尝试编写一个简单的算法来将图片的大小减半,这对我来说似乎很有意义,但我可能在这里错过了一些明显的东西,并且想知道是否有人可以指出我正确的方向。
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 循环的索引越界错误。
首先,画布的尺寸应该是原始图像的一半。所以你应该改变
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 循环的问题。键入一些额外的键所花费的时间也会比尝试查找代码中的问题所花费的时间更少。