2011-11-24 57 views
1

我使用Processing將大圖像分成一系列較小的矩形節點。我需要一些幫助瞭解像素陣列

處理將PImage的像素的顏色值存儲在pixels陣列中,我正在訪問該陣列以將圖像分解爲更小的部分。出於某種原因,當我的意圖是當節點排列在draw()中時顯示整個圖像時,我得到了this輸出。

這裏是我的主類:

ArrayList node = new ArrayList(); 
PImage grid; 
PVector nodeDimensions = new PVector(210, 185); 
PVector gridDimensions = new PVector(2549, 3300); 
String name = "gridscan.jpeg"; 

void setup() { 
    size(500, 500); 
    grid = loadImage(name); 
    grid.loadPixels(); 
    fillPixels(); 
    noLoop(); 
} 

void fillPixels() { 
    int nodeNum = 0; 
    for (int startX = 0; startX < 2549 - nodeDimensions.x; startX += nodeDimensions.x) { 
    for (int startY = 0; startY < 3300 - nodeDimensions.y; startY += nodeDimensions.y) { 
     node.add(new Node()); 
     sendPixels(new PVector(startX, startY), nodeNum); 
     nodeNum++; 
    } 
    } 
} 

void sendPixels(PVector start, int nodeNum) { 
    for (int x = int(start.x); x < start.x + nodeDimensions.x; x++) { 
    for (int y = int(start.y); y < start.x + nodeDimensions.y; y++) { 
     Node _node = (Node) node.get(node.size() - 1); 
     _node.fillPixel(new PVector(x, y), grid.pixels[int(y*gridDimensions.x+x)]); 
    } 
    } 
} 

void draw() { 
    drawNodes(); 
} 

void drawNodes() { 
    int nodeNum = 0; 
    for (int x = 0; x < width; x += nodeDimensions.x) { 
    for (int y = 0; y < height; y += nodeDimensions.y) { 
     Node _node = (Node) node.get(nodeNum); 
     _node.drawMe(new PVector(x - (nodeDimensions.x/2), y - (nodeDimensions.y/2))); 
     nodeNum++; 
    } 
    } 
} 

這裏是Node類:

class Node { 

color[] pixel; 

Node() { 
    pixel = new color[int(nodeDimensions.x * nodeDimensions.y)]; 
} 

void fillPixel(PVector pos, color pixelValue) { 
    if(int(pos.y * nodeDimensions.y + pos.x) < 38850) pixel[int(pos.y * nodeDimensions.y + pos.x)] = pixelValue; 
} 

void drawMe(PVector centerPos) { 
    pushMatrix(); 
    translate(centerPos.x, centerPos.y); 
    for(int x = 0; x < nodeDimensions.x; x++) { 
    for(int y = 0; y < nodeDimensions.y; y++) { 
    stroke(getPixelColor(new PVector(x, y))); 
    point(x,y); 
    } 
    } 
    popMatrix(); 
} 


color getPixelColor(PVector pos) { 
return pixel[int(pos.y * nodeDimensions.x + pos.x)]; 
} 

} 

希望我的代碼是有道理的。我懷疑這個問題出現在主類的sendPixels()方法中。

我使用this這個來自Processing參考的頁面作爲創建該函數的指南,我不確定我的邏輯錯在哪裏。

任何幫助將不勝感激,請讓我知道,如果我可以澄清的東西。

回答

2

根據getPixelColor(),它似乎使用行。
所以,如果你有一個5x5的方形圖像,然後2x2的將是7
要獲得索引,你使用這個公式:
index = (y - 1) * width + x
這樣解釋它的外觀很簡單,不是嗎?