Processing编程学习指南1.3 灰度模式

简介:

1.3 灰度模式


正如1.2节所讨论的,在屏幕上构建图形至少要知道像素坐标。你已经非常礼貌地指导计算机在某个特定的位置绘制了特定大小的图形。但是,还有一个非常关键的内容没有介绍—颜色。

在数字化的世界里,精确性是非常重要的。比如,“嗨,你能将那个圆设定为蓝绿色吗?”之类的话是没有意义的。因为,颜色是通过一系列具体的数值来定义的。下面举一个最简单的例子:灰度(grayscale)。为灰度指定数值的方法如下:数值0代表黑色,数值255代表白色,而在此之间的其他数值(50、87、162、209等)代表的是由黑色逐渐到白色的过渡色,如图1-13所示。

你是否感觉0~255的取值看上去太随意?

对于某个指定图形的颜色信息,它是存储在计算机内存中的。内存实质上是采用二进制系统,由0和1构成的一个长序列。每个0或1就是一个比特(bit),比特是数据存储的最小单位,8比特就称为一个字节(byte)。想象一下,如果你有8比特(也就是1字节),对它们按照顺序进行排列,那么总共有多少种排列方式?答案是256种(如果你对二进制数进行一点研究就会证明这一点),也就是0到255之间的一系列数字。Processing使用8位颜色描述灰度范围(grayscale range),使用24位颜色(红、绿和蓝三种颜色分别包含8位,详见1.4节内容)描述全彩色(full color)。

 

理解了颜色的工作机制,现在就可以回到1.2节,为你绘制的图形设置特定的灰度颜色了。在Processing中,每一个图形都有stroke()函数,或fill()函数,或者两者兼有。stroke()函数可以设置图形轮廓的颜色,fill()函数可以设置图形的填充颜色。很明显,线条和点只能使用stroke()函数。

如果你忘记指定颜色值,那么Processing默认使用黑色(0)作为线条颜色,白色(255)作为填充颜色。注意,由于我使用了尺寸为200×200像素,也就是一个相对大一些的窗口,因此,也要使用与窗口对应的合适大小的矩形坐标数值,如图1-14所示。

 

在绘制图形之前,通过增加strok()和fill()函数可以设置颜色。这很像指导你朋友用一只专用笔在绘图纸上画画,你应该在他开始画之前而不是之后告诉他选好颜色。

另外还有一个函数background(),它可以在图形渲染时设置窗口的背景色。

示例1-1:stroke()和fill()

 

 

使用noStroke()和noFill()函数可以禁用线条颜色stroke()和填充色fill(),前者使得轮廓线消失,后者使得填充色消失。你的直觉可能是想使用stroke(0)来禁用轮廓线,但是,要注意0并不是“什么都没有”,而是意味着黑色。此外,注意不要同时使用noFill()和noStroke(),否则不会显示任何东西!

示例1-2:noFill()

 

 

 

 

在绘制图形时,Processing总是使用最近设定的stroke()和fill(),从上到下逐行执行代码(见图1-17)。

 

 

 

练习1-4:猜想需要什么样的指令能够完成下面的图形。

 

相关文章
|
1月前
|
XML 人工智能 安全
Prompt进阶2:LangGPT(构建高性能Prompt策略和技巧)--最佳实践指南
Prompt进阶2:LangGPT(构建高性能Prompt策略和技巧)--最佳实践指南
Prompt进阶2:LangGPT(构建高性能Prompt策略和技巧)--最佳实践指南
|
1月前
|
存储 人工智能 自然语言处理
从API到Agent:万字长文洞悉LangChain工程化设计
给“AI外行人士”引入一下LangChain,试着从工程角度去理解LangChain的设计和使用。同时大家也可以将此文档作为LangChain的“10分钟快速上手”手册,本意是希望帮助需要的同学实现AI工程的Bootstrap。
从API到Agent:万字长文洞悉LangChain工程化设计
|
2月前
|
设计模式 测试技术 Go
Go 项目必备:Wire 依赖注入工具的深度解析与实战应用
在现代软件开发中,依赖注入(Dependency Injection,简称 DI)已经成为一种广泛采用的设计模式。它的核心思想是通过外部定义的方式,将组件之间的依赖关系解耦,从而提高代码的可维护性、可扩展性和可测试性。然而,随着项目规模的增长,手动管理复杂的依赖关系变得日益困难。这时,依赖注入代码生成工具就显得尤为重要。在众多工具中,Wire 以其简洁、强大和易用性脱颖而出,成为 Go 语言项目中的宠儿。本文将带你深入了解 Wire 的安装、基本使用、核心概念以及高级用法,并通过一个实际的 web 博客项目示例,展示如何利用 Wire 简化依赖注入的实现。准备好了吗?让我们开始这场代码解耦的奇
|
4月前
|
JSON NoSQL Go
|
6月前
|
安全 Kotlin
Kotlin 学习笔记(五)—— Flow 数据流学习实践指北(一)(上)
Kotlin 学习笔记(五)—— Flow 数据流学习实践指北(一)(上)
40 0
|
6月前
|
API Android开发 Kotlin
Kotlin 学习笔记(五)—— Flow 数据流学习实践指北(一)(下)
Kotlin 学习笔记(五)—— Flow 数据流学习实践指北(一)(下)
26 0
|
机器学习/深度学习 资源调度 算法
主动学习(Active Learning)简介综述汇总以及主流技术方案
3.主动学习(Active Learning)简介综述汇总以及主流技术方案
主动学习(Active Learning)简介综述汇总以及主流技术方案
|
缓存 Java API
【Java并发编程实战14】构建自定义同步工具(Building-Custom-Synchronizers)(中)
JDK包含许多存在状态依赖的类,例如FutureTask、Semaphore和BlockingQueue,他们的一些操作都有前提条件,例如非空、任务已完成等。
81 0
|
设计模式 缓存 算法
【Java并发编程实战14】构建自定义同步工具(Building-Custom-Synchronizers)(下)
JDK包含许多存在状态依赖的类,例如FutureTask、Semaphore和BlockingQueue,他们的一些操作都有前提条件,例如非空、任务已完成等。
143 0
|
缓存 安全 Java
【Java并发编程实战14】构建自定义同步工具(Building-Custom-Synchronizers)(上)
JDK包含许多存在状态依赖的类,例如FutureTask、Semaphore和BlockingQueue,他们的一些操作都有前提条件,例如非空、任务已完成等。
106 0