极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19781|回复: 4

Processing官网学习部分原文翻译——图像与像素

[复制链接]
发表于 2012-11-18 18:32:53 | 显示全部楼层 |阅读模式
本帖最后由 hp198969 于 2012-11-18 18:34 编辑

图像与像素
本手册适用于Processing1.1及以上版本。如果你发现有任何错误或者有任何建议,请联系我们。本手册源自《学习Processing》一书,Daniel Shiffman编著,Morgan Kaufmann出版社出版,Elsevier公司2008版权,版权所有。
一副数字图像只不过是一些数据——在网格像素中的特定位置表明红、绿、蓝色的变化的数字。多数时候,我们把这些像素看做计算机屏幕上加在一起的小型矩阵。用一些创造性思维和一些低级别的像素操作代码,我们就可以用无数种方法显示这些信息。本手册致力于打破Processing中简单的图形绘制,用图像(和相应的像素)作为Processing图形的构建模块。
从图像开始
但愿你熟悉了数据类型的想法。你可能经常指定他们——一个浮点变量“speed”、整型“x”等等。这些都死原始数据类型,以比特的形式存储在计算机内存里面以供我们使用。虽然这可能有点麻烦,你同样希望使用对象,存储多个数据片段(包括函数)的复杂的数据类型——“Ball”类,例如,可能包括为浮点变量的位置、大小和速度以及移动方式、自身显示等等。
除了用户定义的对象(比如一个Ball),Processing有一群准备好了的方便的类,不需要我们编写任何代码。在本手册中,我们将检测PImage,一个加载并显示以及查看其像素的类。
例子:“Hello World”图像
//声明PImage变量的类型
PImage img;

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()函数在储存在你的Processing草图的数据文件夹中寻找图像文件。
数据文件夹:怎样到那儿?
可以通过以下方式自动将图像添加到数据文件夹:
草图——添加文件……
或者手动:
草图——显示草图文件夹。
浙江打开草图文件夹。如果没有该数据目录则创建一个,否则将你的图像放置在内。
Processing接收一下文件格式的图像: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()函数创建一个新的空白图像。
//创建一个空白图像,200×200像素,RGB颜色模式
PImage img = createimage(200,200,RGB);
我们应该注意从硬盘加载图像到内存中是一个缓慢的过程,我们应该却白我们的程序只在setup中只做一个这个动作。用image()加载图像可能会造成性能下降甚至“内存溢出”错误。
一旦图像被加载,只需要image()函数显示它。image()函数必须包括三个参数——需要显示的图像、x坐标和y坐标。视情况可以添加两个参数调整图像到一定的宽度和高度。
image(img,10,20,90,60);
你的第一幅图像处理滤波
显示一幅图像的时候,你可能想改变他的外观。也许你想图像出现深色、透明、慢放等。这类简单的图像滤波可以用Processing的tint()函数实现。图像的tint()函数本质上相当于形状的fill()函数,当在屏幕上显示一幅图像时设置颜色和透明度。一幅图像,不过通常不只是一种颜色。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);
第二个参数将会改变图像的透明度

//图像50%不透明
tint(255,127);
image(sunflower,0,0);
第三个参数将会影响每个颜色组件的红、绿、蓝亮度

//没有红色,最大绿色,所有蓝色
tint(1,200,255);
image(sunflower,0,0);
最后,添加第四个参数操作透明度(和第二步相同)。顺便说一句,tint()值得范围可以由colorMode()函数指定。

//有红色和透明度的图像
tint(255,0,0,100);
image(sunflower,0,0);
像素,像素,还是像素



未完待续……









回复

使用道具 举报

发表于 2012-11-18 19:56:26 | 显示全部楼层
好东西,顶一下!!
回复 支持 反对

使用道具 举报

发表于 2013-5-16 10:51:19 | 显示全部楼层
楼主 的源码 用中文字符书写,拷贝后要改成英文字符。
回复 支持 反对

使用道具 举报

发表于 2014-12-1 17:05:42 | 显示全部楼层
很不错的东西,字的学习~~~~
回复 支持 反对

使用道具 举报

发表于 2014-12-10 13:34:41 | 显示全部楼层
认真学习,顶一下.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 08:56 , Processed in 0.041848 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表