< Return to Video

Image Code (9 mins)

  • 0:01 - 0:06
    在本节,我们要将之前讲过的代码概念
  • 0:06 - 0:12
    和图像、像素和 RGB 值的概念结合起来
  • 0:12 - 0:17
    本节的实例中,我们一次只研究一个像素
  • 0:17 - 0:22
    下一节中,我们会将数量增大,一次研究上万个像素
  • 0:22 - 0:27
    开始之前,我想要看看这个名为 x.png 的图像
  • 0:27 - 0:33
    这个图像非常小,是10×10的图像,在这页的这个地方
  • 0:33 - 0:38
    它是一个黑色的图像,上面有个白色的 x
  • 0:38 - 0:44
    图像非常小,我们稍后会将它放大
  • 0:44 - 0:49
    png 是一种图像格式,叫便携式网络图像格式
  • 0:49 - 0:55
    jpeg 可能是你比较熟悉的一种图像格式,这两个都是图像格式
  • 0:55 - 1:01
    我要看的是这里,这里有一些代码,加载并显示 x.png 图像
  • 1:01 - 1:06
    这是第一个、非常简单的图像处理代码实例
  • 1:06 - 1:10
    代码在这里,我讲一下每一行的内容
  • 1:10 - 1:14
    第一行:image = new SimpleImage("x.png");
  • 1:15 - 1:19
    这行代码的意思是右边的代码将 x.png 图像加载到存储器中
  • 1:19 - 1:24
    我们以后会讨论什么是存储器
  • 1:24 - 1:28
    图像载入计算机后,计算机就可以处理图像了
  • 1:28 - 1:33
    加载图像后,这里的等号就是
  • 1:33 - 1:37
    把图像存储在变量里,我将变量命名为 image.setZoom(20)
  • 1:37 - 1:41
    这个变量和我们前面讲的变量是一样的
    第二行:image.setZoom(20)
  • 1:41 - 1:46
    它调用图像所带的 setZoom 函数,传递数字20
  • 1:46 - 1:52
    这行代码的作用是设定选项,用于显示20倍的图像
  • 1:52 - 1:57
    对于这么小的图像
  • 1:57 - 2:01
    用这种方法来将它放大,我们就可以看得到
  • 2:01 - 2:04
    最后,print(image)和以前讲的非常相似,就是在右边输出图像
  • 2:04 - 2:07
    跟输出字符串和数字一样
  • 2:07 - 2:12
    我们来试一下。运行后,你看到这里显示 x.png 这个图像
  • 2:12 - 2:17
    其实你可以数出来,1,2,3,4
  • 2:17 - 2:22
    你可以将像素数出来,是10像素×10像素
  • 2:22 - 2:27
    在这里显示的是20倍大
  • 2:27 - 2:32
    将数字改成10,再次运行
  • 2:32 - 2:35
    改成40,运行,图像就大了许多
  • 2:35 - 2:40
    这只是代码的第一个实例
  • 2:40 - 2:45
    继续往下学,我们就可以加载和处理图像
  • 2:45 - 2:50
    再来做一点更有趣的事情。我要扩展代码,从而可以处理单个像素
  • 2:50 - 2:55
    我在程序中间加两行代码
  • 2:55 - 2:59
    这一行是 pixel = image.getPixel(0,0)
  • 2:59 - 3:04
    这行代码的作用是根据我们在这里指定的 x y 坐标
  • 3:04 - 3:10
    在图像中获取某个像素点,0,0指向是左上角的像素点
  • 3:10 - 3:15
    所以它获取左上角的像素点,并将其存储到变量
  • 3:15 - 3:20
    这行是 pixel.setRed(255)
  • 3:20 - 3:26
    这行代码调用 setRed 函数
  • 3:26 - 3:31
    setRed的作用是获取括号里面的数值
  • 3:31 - 3:36
    将该数值设为像素的红色值,运行一下,看结果如何
  • 3:36 - 3:42
    结果是代码获取左上角这个原本是黑色的像素点
  • 3:42 - 3:46
    要记得每个像素有三个值,红绿蓝
  • 3:46 - 3:52
    这行代码访问红色值
  • 3:52 - 3:56
    将其改成255,就是覆盖原来的数值
  • 3:56 - 4:02
    所以我们看到这个像素点是红色的
  • 4:02 - 4:08
    setRed 改变红色值,有类似的函数 setGreen 和 setBlue
  • 4:08 - 4:13
    就有三个函数 setRed,setGreen 和setBlue
  • 4:13 - 4:18
    有这些函数,就可以任意改变红绿蓝的值
  • 4:18 - 4:22
    这里我提一下附加材料
  • 4:22 - 4:25
    我刚介绍了三种函数
  • 4:25 - 4:29
    Image functions reference (图像函数参考)是独立的页面,用一个表列出所有函数
  • 4:29 - 4:33
    在以后的练习中,假如你要知道函数的作用,就可以作为参考
  • 4:33 - 4:37
    但在我的讲课中,我就只用一部分函数
  • 4:37 - 4:40
    下面我要演示这些函数的作用
  • 4:40 - 4:44
    我们来看一些实例
  • 4:44 - 4:48
    就是用函数执行一些任务
  • 4:48 - 4:52
    实例的格式是这个小代码框里有一些初始代码
  • 4:52 - 4:56
    下面的表格列出一些难题
  • 4:56 - 5:00
    如设置绿色、黄色等,我们逐个来分析
  • 5:00 - 5:04
    表格的右边都有一个小小的显示按钮
  • 5:04 - 5:08
    你可以点击按钮,查看解答代码
  • 5:08 - 5:12
    稍后你可以自己访问这页,亲自试一下我演示过的实验,或做点修改
  • 5:12 - 5:15
    我们来试第一个
  • 5:15 - 5:19
    我运行代码,看代码做什么
  • 5:19 - 5:24
    现在,代码只是获取0,0像素点,改成红色,是之前讲过的
  • 5:24 - 5:29
    看看第一个问题,将0,0像素点设为绿色
  • 5:29 - 5:34
    这个表格是用英文的,它的意思是
  • 5:34 - 5:39
    你要根据我们已经学过的步骤来达到某些效果
  • 5:39 - 5:44
    就函数调用和数值而言,代码框里应该写些什么
  • 5:44 - 5:49
    我们要进行什么运算来取得想要的效果
  • 5:49 - 5:54
    基本上,你是把英语转换成计算机的语言
  • 5:54 - 5:59
    这个例子是要设绿色,我要做的不是调用 serRed 函数
  • 5:59 - 6:04
    而是将它改成调用 setGreen 函数。我们来试试看,是成功的
  • 6:04 - 6:09
    有了绿色的像素点。试试下一个例子
  • 6:09 - 6:15
    下一个例子说要将像素 (0,0) 设成黄色。
  • 6:15 - 6:21
    要让像素变成黄色,我要将红色值和绿色值设成255
  • 6:21 - 6:26
    黄色等于红色加绿色,我将红色和绿色都改变
  • 6:26 - 6:30
    复制这行,然后贴到这里
  • 6:30 - 6:34
    将这里改成红色。我的根据是一旦可以获取像素点
  • 6:34 - 6:38
    我就可以对像素点做几样事情。因此,在第一行,我调用了 setRed,改变红色值
  • 6:38 - 6:42
    接着我可以调用下一行的 setGreen 来改变绿色
  • 6:42 - 6:46
    代码会完成每一步
  • 6:46 - 6:51
    我们试试看。果然,是黄色
  • 6:51 - 6:54
    这其实是回到以前的概念,这有一个像素点
  • 6:54 - 6:59
    该像素点有三个值,我逐行写代码,在计算机里改变这些值
  • 6:59 - 7:04
    我们试试下一个,将像素 1,0 改成黄色
  • 7:04 - 7:10
    这个像素在哪里呢?回到这一行,pixel = image.getPixel(0,0)
  • 7:10 - 7:15
    我还没有改这一行
  • 7:15 - 7:20
    不管这里设的是什么值,如0,0,都只是用来识别不同像素而已
  • 7:20 - 7:25
    如果说1,0,就是获取x=1和y=0的像素
  • 7:25 - 7:29
    习惯是先x后y
  • 7:29 - 7:34
    运行来看看。我们看到的是往右移了一个
  • 7:34 - 7:39
    所以我们可以在这里设定任何值
  • 7:39 - 7:43
    譬如2,4,看看运行的结果,很显然像素在这里
  • 7:43 - 7:47
    这回到我们几节前的内容
  • 7:47 - 7:52
    这是x=0,这是x=1,这是x=2
  • 7:52 - 7:56
    我们不去细看不同x和y值的结果了
  • 7:56 - 8:00
    我们只要知道以下这点就可以了,即使有一百万个像素点
  • 8:00 - 8:05
    我们都可以用特定的x值和y值来设定每个像素点
  • 8:05 - 8:14
    好,这里要将像素0,0设成白色,将这里改回像素0,0
  • 8:14 - 8:23
    我要如何处理红绿蓝来产生白色呢
  • 8:23 - 8:30
    答案是将三个值都设成255,请注意,不用重新输入像素
  • 8:30 - 8:35
    我发现复制现有的像素,再进行修改,通常会容易一些
  • 8:35 - 8:39
    我在这里设置第三个函数
  • 8:39 - 8:44
    pixel.setBlue(255),看看这三个的结果
  • 8:44 - 8:47
    果然,设成了白色,我将三个值都设成了255
  • 8:47 - 8:51
    这里还有一些问题,我就不解答了
  • 8:51 - 8:55
    但如果你想的话,可以到这个页面
  • 8:55 - 8:59
    试一下任何数值
  • 8:59 - 9:03
    你理解了这些内容后,我们就可以做一些练习
Title:
Image Code (9 mins)
Video Language:
English
lovetranslation edited Chinese, Simplified subtitles for Image Code
lovetranslation edited Chinese, Simplified subtitles for Image Code
lovetranslation edited Chinese, Simplified subtitles for Image Code
lovetranslation edited Chinese, Simplified subtitles for Image Code
lovetranslation edited Chinese, Simplified subtitles for Image Code
lovetranslation edited Chinese, Simplified subtitles for Image Code
lovetranslation edited Chinese, Simplified subtitles for Image Code
lovetranslation edited Chinese, Simplified subtitles for Image Code
Show all

Chinese, Simplified subtitles

Revisions