示例#1
0
 /**
  * Get the composited canvas.
  *
  */
 public function getCompositeCanvas()
 {
     // Create our target canvas
     $canvas = new Canvas($this->width, $this->height, 0x0);
     $crect = $canvas->getRect();
     // Precalculate some stuff for performance
     $samesize = [];
     foreach ($this->layers as $i => $layer) {
         $samesize[$i] = $layer->position == $layer->canvas->getRect();
     }
     // Process the composite canvas
     for ($n = 0; $n < $this->width; $n++) {
         for ($m = 0; $m < $this->height; $m++) {
             if ($this->background) {
                 $co = $this->background->getPixel($n, $m);
             } else {
                 $co = 0x0;
             }
             foreach ($this->layers as $i => $layer) {
                 //printf("Pre [%d] (mode=%d): 0x%06x ", $i, $layer->blend, $co);
                 if ($layer->position->isXYWithin($n, $m)) {
                     $co = $this->blend($co, $layer->canvas->getPixel($n, $m), $layer->blend, $layer->opacity);
                 }
                 //printf("Post: 0x%06x\n", $co);
             }
             $canvas->setPixel($n, $m, $co);
         }
     }
     return $canvas;
 }