2015-01-08 18 views
0

我使用處理的Fedora 20下,我想顯示在屏幕的部分運動物體的延伸軌道的圖像,與在軌道的端部在其當前位置上所顯示的每個對象。爲了避免必須記錄所有軌道的座標,我使用save("image.png");來保存軌道到目前爲止,然後繪製物體。在我使用img = loadImage("image.png");恢復迄今取得,沒有對象的軌道,這將仍然是其先前的立場下一幀。我軌跡的延伸到他們的新位置,然後使用save("image.png");保存擴展軌道,仍然沒有對象,準備下一輪循環。然後,我將他們的新位置畫在延長的軌道末端。通過這種方式,連續的循環顯示物體前進,以前的位置作爲跟蹤它們後面的軌跡。在處理中,如何將窗口的一部分保存爲圖像?

這在測試在圖像的整體框架一直運作良好,但現在我需要把該顯示在整個框架的一個角落裏,並留下其餘不變。我預計createImage(...)將是答案,但我找不到任何細節如何如此。

類似的問題在這裏問了這樣的建議:「在PImage類包含出口文件保存()函數的API應該是這樣的問題的第一站。」當然,我已經看過API,但我不認爲它在這裏有幫助,除非我必須創建圖像來逐像素地保存像素,在這種情況下,我希望它可以減緩很多事情。

所以我的問題是:在Processing我可以保存和恢復幀的一部分作爲圖像,而不影響其餘的框架?

回答

0

我一直在研究這個。我覺得奇怪的是,我可以找到保存和加載整個幀的素描參考,教程和示例,但沒有簡單的方法將幀的一部分保存並恢復爲圖像。我大概可以用Pimage做到這一點,但是這似乎需要很多image.在這裏繪製的所有東西前面。

我已經圍繞它與一個kludge:我創建了一個蒙版圖像(見this Processing reference)整個幀的大小。掩模被定義爲表示不透明度灰色區,使白色的,零不透明度(0),是透明的和黑色的,完全不透明(255)完全隱藏的背景圖像,因而:

{ size (1280,800); 
    background(0); // whole frame is transparent.. 
    fill(255); // ..and.. 
    rect(680,0,600,600); // ..smaller image area is now opaque 
    save("[path to sketch]/mask01.jpg"); 
} 

void draw(){} 

然後在我的主代碼我用:

PImage img, mimg; 

img = loadImage("image4.png"); // The image I want to see .. 
// .. including the rest of the frame which would obscure previous work 
mimg = loadImage("mask01.jpg"); // create the mask 
//apply the mask, allowing previous work to show though 
img.mask(mimg); 
// display the masked image 
image(img, 0, 0); 

我會接受這個作爲答案,如果沒有更好的建議。

0
void setup(){ 
    size(640, 480); 
    background(0); 

    noStroke(); 
    fill(255); 
    rect(40, 150, 200, 100); 
} 

void draw(){ 

} 

void mousePressed(){ 
    PImage img =get(40, 150, 200, 100); 
    img.save("test.jpg"); 
} 
相關問題