2017-08-19 61 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