2017-08-19 35 views
1

我正在使用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); 

我对这段新代码非常困惑。

回答

1

当您在Java模式下运行草图时,您以Java运行。 Java同步加载图像,这意味着代码在图像完全加载之前不会继续运行。这就是它在Java模式下工作的原因。

但是,当您使用Processing.js运行时,您会以JavaScript的形式运行。 JavaScript异步加载图像,这意味着图像在背景中加载,同时继续执行代码。这意味着不保证图像在下一行执行时完成加载,这就是为什么图像的widthheight未设置。

preload命令告诉Processing.js加载图像草图开始执行之前,让你保证,你之前的图像加载试图访问其widthheight

the Processing.js reference

该指令调节图像预加载,这是在一个草图使用的LoadImage()或requestImage()时需要。使用此指令将预加载用引号括起来的所有图像,如果使用多个图像,则用逗号分隔,以便在草图开始运行时可供使用。由于资源是通过AJAX方式加载的,因此不使用此指令将导致草图加载图像,然后立即尝试以某种方式使用此图像,即使浏览器尚未完成下载并缓存它。

+0

所以我需要'preload'命令,因为我正在使用Processing.js运行此代码,该代码读取为JavaScript异步加载图像。这对我来说很好,但是我对命令的语法感到困惑,因为'/ * * /'是我一直用在javascript中的大量注释。它在处理过程中有不同的含义吗?并且'preload'是一个Java命令? – Jozurcrunch

+0

@Jozurcrunch这有点令人困惑,因为它不是真正的Java或JavaScript。它特定于Processing.js。从技术上讲,这是对Java和JavaScript的评论(所以它基本上被Java和JavaScript忽略),但Processing.js本身检测它并加载图像。更多信息可以在[Processing.js参考](http://processingjs.org/reference/preload/)中找到。 –

+0

这是很好的知道。那么我认为这是Processing.js的一个怪癖吗?与其根本的东西相反? – Jozurcrunch