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