【09】processing-图像(中文)

图像和像素

Daniel Shiffman

数字图像只不过是表示像素网格上特定位置的红、绿、蓝变化的数据编号。大多数时候,我们把这些像素看作是夹在电脑屏幕上的微型矩形。然而,只要有一点创造性的思考和用代码对像素进行一些低级的操作,我们就可以用多种方式显示这些信息。本教程致力于在处理和使用图像(及其像素)作为图形处理的构建块时,打破简单的图形绘制。

 

图片入门。

希望您对数据类型的概念感到满意。你可能经常指定它们——一个浮点变量“speed”,一个int“x”,等等。这些都是原始的数据类型,是计算机内存中的位,随时可以使用。尽管可能有点棘手,但您还是希望使用对象、存储多个数据片段的复杂数据类型(以及功能)-“Ball”类,例如,可能包含用于位置、大小和速度的浮点变量以及移动、显示自身的方法等。

除了用户定义的对象(比如Ball)之外,处理还有一堆方便的类,这些类都可以在不编写任何代码的情况下使用。在本教程中,我们将研究PImage,一个用于加载和显示图像以及查看其像素的类。

 

PImage img; // 声明PImage类型的变量
void setup() {
  size(320,240);
  // 通过加载图像文件创建PImage的新实例
  img = loadImage("mysummervacation.jpg");
}
void draw() {
  background(0);
  // 在坐标(0,0)处将图像绘制到屏幕上
  image(img,0,0);
}

 

使用PImage对象的实例与使用用户定义的类没有区别。首先,声明一个名为“img”的PImage类型的变量。其次,通过loadImage()方法创建PImage对象的新实例。loadImage()接受一个参数,一个表示文件名的字符串,并将该文件加载到内存中。loadImage()查找存储在处理草图的“数据”文件夹中的图像文件。

 

数据文件夹:我怎么去那里?

图像可以通过以下方式自动添加到数据文件夹:

草图→添加文件。

或手动:

草图→显示草图文件夹

这将打开草图文件夹。如果没有数据目录,请创建一个。否则,请将图像文件放入其中。

处理接受以下图像文件格式:GIF、JPG、TGA、PNG。

 

在上面的例子中,我们从未调用“构造函数”来实例化PImage对象,称之为“new PImage()”,这看起来有点奇怪。毕竟,在大多数与对象相关的示例中,构造函数是生成对象实例的必需条件。

 

Spaceship ss = new Spaceship();
Flower flr = new Flower(25);
//然而
PImage img = loadImage("file.jpg");

实际上,loadImage()函数执行构造函数的工作,返回从指定文件名生成的PImage对象的全新实例。我们可以把它看作是从文件加载图像的PImage构造函数。创建空白图像时,使用createimage()函数。

 

// 创建一个带有RGB颜色的200 x 200像素的空白图像
PImage img = createImage(200, 200,RGB);

 

我们还应该注意,将图像从硬盘加载到内存的过程是一个缓慢的过程,我们应该确保我们的程序只需要在setup()中执行一次。在draw()中加载图像可能会导致性能下降以及“内存不足”错误。

 

加载图像后,它将与image()函数一起显示。函数必须包含三个参数:要显示的图像、x位置和y位置。可选地,可以添加两个参数来将图像调整为特定的宽度和高度。

 

image(img,10,20,90,60);

 

你的第一个图像处理过滤器

显示图像时,可能需要更改其外观。也许您希望图像看起来更暗、透明、略带蓝色等。这种简单的图像过滤是通过处理的tint()函数实现的。tint()实质上是shape's fill()的图像等价物,设置在屏幕上显示图像的颜色和alpha透明度。然而,图像通常不是一种颜色。tint()的参数只指定为该图像的每个像素使用多少给定颜色,以及这些像素的显示透明度。

 

对于下面的示例,我们将假设加载了两个图像(向日葵和狗),狗显示为背景(这将允许我们演示透明度)

 

PImage sunflower = loadImage("sunflower.jpg");
PImage dog = loadImage("dog.jpg");
background(dog);

 

 

如果tint()收到一个参数,则仅影响图像的亮度。

 

 

// 图像保持其原始状态。
tint(255);  
image(sunflower,0,0);

 

 

//图像看起来更暗。
tint(100);  
image(sunflower,0,0);

 

 

 

 

 

//第二个参数将更改图像的alpha透明度。
//图像不透明度为50%。
tint(255,127);  
image(sunflower,0,0);

 

 

 

 

 

//三个参数影响每种颜色的红、绿和蓝分量的亮度。
// 没有一个是红色的,大部分是绿色的,所有的都是蓝色的。
tint(0,200,255);
image(sunflower,0,0);

 

 

 

 

 

//最后,向该方法添加第四个参数将操作alpha(与2相同)。
//顺便说一下,可以使用colorMode()指定tint()的值范围。
//图像呈红色且透明。
tint(255,0,0,100);
image(sunflower,0,0);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值