在这个短篇中我们会介绍一种谜题,该谜题将建立于 我们已经介绍的一些图像操作代码。所以这个谜题是这样的:这里有一幅 未知图像的图片。图片上的红、绿和蓝色数值 有些乱。所以我们需要编写代码,改变 红、绿、蓝色数值,从而展现图片原始的影像,就可以看到它到底是什么了。 这就是我将举的例子,所谓的“金子谜题” 我们知道图片里有着某种图像。而这张图片中, 第一,图片中绿色和蓝色 被赋予了一个从0到255的随机数值。而且事实上,如果你盯着图片看, 会发现是一种雪花斑点。你会发现 一些像素点有着非常高的绿色数值,而一些像素点有着非常高的蓝色数值, 它们看上去就是绿色或蓝色;而图片中同样散布着一些青绿色的像素; 它们的绿色和蓝色数值都非常高。这就是 这张图片一个程度上的混乱。另一个程度是, 我们希望重现的图像 是用红色展现的。事实上,它只有红色数值。所以现在看到的绿色和蓝色都是杂讯。 但这些数值被除以了10,因此它们看上去非常暗。所以我们现在看到的 模糊图像,是,呃,藏着一张很暗的红色图像。 这张红色图像被这些绿色和蓝色的随机雪花斑点所覆盖。 所以我们就看不到原始的图像了。所以我们要编写代码来修复这个问题。 我们现在来解决这个问题。与往常一样,我将从 空白的文字键入区域开始写代码。键入区下方有解答, (只需点击)“显示解答”按钮。所以如果你想访问这个页面并自己尝试一下,这样做你就可以看到解答。 好,下面我想做的第一件事情,是看看如果我什么都不做就运行会怎么样: 现在这个循环是空白的;所以如果我运行这个程序,我们还是会得到未经改变的谜样图案。 好,所以我真正要做的第一件事是,我要键入 “pixel.setGreen(0)” 我要把绿色数值归零。就是说我要把绿色清除掉 然后就能看到结果了。唔,好,所以现在图像变得好一些了。现在我们还有 这些蓝色的雪花斑。我们至少已经把绿色雪花斑给清除掉了。所以现在我同样要清除蓝色雪花斑。 所以我会用,“pixel.setBlue(0)”,我们来试试。 好,唔,所以我已经把雪花斑点都清除掉了。但现在的问题是 这张红色的图片太暗了,所以我们无法看到。所以说这张图 实际上已经在那里了,但我们看不见。所以我需要按照比例还原(原始的红色数值), 对吧?图像已经在那里了,我只需让它变亮。所以我要用“pixel.setRed”来把 “pixel点getRed”放大5、10、或20倍。 所以我要,在这个例子中,说明里已经说了(图像中的原始数值)被除以 10倍。所以我要把红色放大10倍。 唔,好了。所以这就是我们得到的图像。显然, 这是一张在旧金山一侧看到的金门大桥图像。现在, 很容易看出这张图像还不太对。这是因为, 图像数据全部是红色,即使我们已经还原到原始图像,它看上去还是全红的。我的意思是, 实际上这是一张黑白图片 而一般黑白图片是以从黑到白的光谱显示的。在这个例子中, 图片则是以从黑到红的光谱显示的。所以我们现在得到的是正确的图片,但就是 加了一层红色。在这一小节里我们已经完成了需要做的操作。你知道, 你可以看出图片原始的影像。在后面的小节中我将说明怎样 怎样修改现在的结果,使图片看上去是合适的黑白图像。