function testCreate()
 {
     $img = wiPaletteImage::create(10, 10);
     $this->assertTrue($img instanceof wiPaletteImage);
     $this->assertTrue($img->isValid());
     $this->assertFalse($img->isTrueColor());
 }
 function execute($img, $channels)
 {
     $blank = array('red' => 0, 'green' => 0, 'blue' => 0);
     if (isset($channels['alpha'])) {
         unset($channels['alpha']);
     }
     $width = $img->getWidth();
     $height = $img->getHeight();
     $copy = wiPaletteImage::create($width, $height);
     if ($img->isTransparent()) {
         $otci = $img->getTransparentColor();
         $TRGB = $img->getColorRGB($otci);
         $tci = $copy->allocateColor($TRGB);
     } else {
         $otci = null;
         $tci = null;
     }
     for ($x = 0; $x < $width; $x++) {
         for ($y = 0; $y < $height; $y++) {
             $ci = $img->getColorAt($x, $y);
             if ($ci === $otci) {
                 $copy->setColorAt($x, $y, $tci);
                 continue;
             }
             $RGB = $img->getColorRGB($ci);
             $newRGB = $blank;
             foreach ($channels as $channel) {
                 $newRGB[$channel] = $RGB[$channel];
             }
             $color = $copy->getExactColor($newRGB);
             if ($color == -1) {
                 $color = $copy->allocateColor($newRGB);
             }
             $copy->setColorAt($x, $y, $color);
         }
     }
     if ($img->isTransparent()) {
         $copy->setTransparentColor($tci);
     }
     return $copy;
 }
 protected function copyAsNew($trueColor = false)
 {
     $width = $this->getWidth();
     $height = $this->getHeight();
     if ($trueColor) {
         $new = wiTrueColorImage::create($width, $height);
     } else {
         $new = wiPaletteImage::create($width, $height);
     }
     // copy transparency of source to target
     if ($this->isTransparent()) {
         $rgb = $this->getTransparentColorRGB();
         if (is_array($rgb)) {
             $tci = $new->allocateColor($rgb['red'], $rgb['green'], $rgb['blue']);
             $new->fill(0, 0, $tci);
             $new->setTransparentColor($tci);
         }
     }
     imageCopy($new->getHandle(), $this->handle, 0, 0, 0, 0, $width, $height);
     return $new;
 }