2017-03-20 4 views
0

Ich benutze Verarbeitung und bin das Kopieren der Pixel [] Array Pixel für Pixel in einer for-Schleife zu einem PGraphics-Objekt.Beeinflusst die Verwendung einer Matrixtransformation das Kopieren von Pixel um Pixel aus Pixeln []? Wenn das so ist, wie? (in Processing/Java)

Ich interessiere mich für die Verwendung von pushMatrix() und popMatrix() zusammen mit einigen Transformationen, aber ich kann keine Informationen darüber finden, wie die Funktionen translate(), rotate() und scale() das Pixel [] -Array beeinflussen ist organisiert.

Auch in den Informationen, die ich finden konnte, heißt es, die Matrix zu schieben, dann zu zeichnen, und dann die Matrix wieder in den ursprünglichen Zustand zu bringen. Ich bin gespannt, ob das Kopieren von Pixeln Pixel für Pixel als Zeichnen zählen würde. Ich weiß, dass image() betroffen ist, aber was noch? Wo finde ich eine Liste? Was sind alle Arten von Zeichnen und Bearbeiten von Pixeln, auf die sich die Matrixtransformationen auswirken?

Dank

Antwort

0

Wenn Sie ein Bild in eine PGraphics Instanz machen möchten, gibt es keine Notwendigkeit, manuell durch Pixel die pixels[] Array Pixel zuzugreifen.

Beachten Sie, dass PGraphics image() bereitstellt, die frühere Transformationen (Translation/Rotation/Skalierung) berücksichtigen können.

Hier ist ein einfaches Beispiel:

PImage testImage; 
PGraphics buffer; 

void setup(){ 
    size(400,400); 

    testImage = createImage(100,100,RGB); 
    //make some noise 
    for(int i = 0; i < testImage.pixels.length; i++){ 
    testImage.pixels[i] = color(random(255),random(255),random(255)); 
    } 
    testImage.updatePixels(); 

    //setup PGraphics 
    buffer = createGraphics(width,height); 
    buffer.beginDraw(); 
    //apply localised transformations 
    buffer.pushMatrix(); 
    buffer.translate(width/2, height/2); 
    buffer.rotate(radians(45)); 
    buffer.scale(1.5); 
    //render transformed image 
    buffer.image(testImage,0,0); 
    buffer.popMatrix(); 

    //draw the image with no transformations 
    buffer.image(testImage,0,0); 
    buffer.endDraw(); 
} 
void draw(){ 
    image(buffer,0,0); 
}