我正在使用PImage类。通常我制作2个PImage对象,将图像加载到其中一个(我的输入图片)中,并使用createImage()创建一个空白图像,这将成为输出。然后,我使用loadPixels()方法来访问输入数据,做一些操作,然后将相应的输出像素设置为结果。到目前为止,我还没有遇到任何麻烦。无法访问安装程序中的PImage对象的宽度/高度属性()
输入和输出PImage对象的尺寸必须相同,以使像素逐像素操作尽可能直线前进。
因此,这里的咸菜:
PImage myinput;
PImage myoutput;
void setup() {
size(350, 350);
myinput = loadImage("myfile.jpg");
// the pic is 300 x 300
//myoutput = createImage(myinput.width, myinput.height, RGB);
//I've hardcoded the width and height below
myoutput = createImage(300, 300, RGB);
}
void draw() {
image(myoutput, 0, 0);
}
上述结果是一个黑色的正方形300×300重叠鉴于我写代码的350×350灰色帆布,这是我期望的结果。现在
,在上述例子中,我硬编码与“线MyOutput中”的宽度和高度:
myoutput = createImage(300, 300, RGB);
我的问题涉及下面的位:
代替硬编码的值,我宁愿做这样的事情:
myoutput = createImage(myinput.width, myinput.height, RGB);
但它不工作。我只得到一个350 x 350的大灰盒子。我不知道为什么。虽然我有我的怀疑。当我使用JavaScript处理图片时,我需要等待页面加载(使用像window.onload(){}等事件监听器等)才能访问图像的宽度/高度属性。
更新: 我看到了另一个帖子里面有以下几点:
/* @pjs preload="myfile.jpg"; */
所以我只包括在此之前,我宣布我PImage对象,现在下面的行工作。
myoutput = createImage(myinput.width, myinput.height, RGB);
我对这段新代码非常困惑。
所以我需要'preload'命令,因为我正在使用Processing.js运行此代码,该代码读取为JavaScript异步加载图像。这对我来说很好,但是我对命令的语法感到困惑,因为'/ * * /'是我一直用在javascript中的大量注释。它在处理过程中有不同的含义吗?并且'preload'是一个Java命令? – Jozurcrunch
@Jozurcrunch这有点令人困惑,因为它不是真正的Java或JavaScript。它特定于Processing.js。从技术上讲,这是对Java和JavaScript的评论(所以它基本上被Java和JavaScript忽略),但Processing.js本身检测它并加载图像。更多信息可以在[Processing.js参考](http://processingjs.org/reference/preload/)中找到。 –
这是很好的知道。那么我认为这是Processing.js的一个怪癖吗?与其根本的东西相反? – Jozurcrunch