首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JES收缩算法不起作用

JES收缩算法不起作用
EN

Stack Overflow用户
提问于 2014-03-03 15:30:22
回答 1查看 385关注 0票数 0

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

代码语言:javascript
复制
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循环的索引越界错误。

EN

回答 1

Stack Overflow用户

发布于 2014-03-05 13:49:01

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

代码语言:javascript
复制
e = (c * 3) / 4
f = (d * 3) / 4

代码语言:javascript
复制
e = c / 2
f = d / 2

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

代码语言:javascript
复制
for targetX in range (1, c):

代码语言:javascript
复制
for targetX in range (1, e):

代码语言:javascript
复制
for targetY in range (1, d):

代码语言:javascript
复制
for targetY in range (1, f):

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

完整的代码应该如下所示

代码语言:javascript
复制
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循环的问题。与尝试查找代码中的问题相比,键入几个额外的键所花费的时间也会更少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22141016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档