public function Draw($aTitle, $aStart, $aEnd, $n = 64, $aReverse = false, $addColorNames = false) { // Setup to draw colormap with names platoe colors $lmarg = ColorMapDriver::LMARG; // left margin $rmarg = ColorMapDriver::RMARG; // right margin $width = ColorMapDriver::WIDTH; // Overall image width // Module height $mh = ColorMapDriver::MODHEIGHT; // Step between each map $ymarg = $mh + ColorMapDriver::MAPMARG; if ($addColorNames) { $ymarg += 50; } // Start position $xs = $lmarg; $ys = ColorMapDriver::YSTART; // Setup a basic canvas graph $height = ($aEnd - $aStart + 1) * $ymarg + 50; $graph = new CanvasGraph($width, $height); $graph->img->SetColor('darkgray'); $graph->img->Rectangle(0, 0, $width - 1, $height - 1); $t = new Text($aTitle, $width / 2, 5); $t->SetAlign('center', 'top'); $t->SetFont(FF_ARIAL, FS_BOLD, 14); $t->Stroke($graph->img); // Instantiate a colormap $cm = new ColorMap(); $cm->InitRGB($graph->img->rgb); for ($mapidx = $aStart; $mapidx <= $aEnd; ++$mapidx, $ys += $ymarg) { $cm->SetMap($mapidx, $aReverse); $n = $cm->SetNumColors($n); list($mapidx, $maparray) = $cm->GetCurrMap(); $ncols = count($maparray); $colbuckets = $cm->GetBuckets(); // The module width will depend on the actual number of colors $mw = round(($width - $lmarg - $rmarg) / $n); // Draw color map title (name) $t->Set('Basic colors: ' . $ncols . ', Total colors: ' . $n); $t->SetAlign('center', 'bottom'); $t->SetAngle(0); $t->SetFont(FF_TIMES, FS_NORMAL, 14); $t->Stroke($graph->img, $width / 2, $ys - 3); // Add the name/number of the map to the left $t->SetAlign('right', 'center'); $t->Set('Map: ' . $mapidx); $t->SetFont(FF_ARIAL, FS_NORMAL, 14); $t->Stroke($graph->img, $xs - 20, round($ys + $mh / 2)); // Setup text properties for the color names if ($addColorNames) { $t->SetAngle(30); $t->SetFont(FF_ARIAL, FS_NORMAL, 12); $t->SetAlign('right', 'top'); } // Loop through all colors in the map $x = $xs; $y = $ys; $k = 0; for ($i = 0; $i < $n; ++$i) { $graph->img->SetColor($colbuckets[$i]); $graph->img->FilledRectangle($x, $y, $x + $mw, $y + $mh); // Mark all basic colors in the map with a bar and name if ($i % (($n - $ncols) / ($ncols - 1) + 1) == 0) { $graph->img->SetColor('black'); $graph->img->FilledRectangle($x, $y + $mh + 4, $x + $mw - 1, $y + $mh + 6); if ($addColorNames) { $t->Set($maparray[$k++]); $t->Stroke($graph->img, $x + $mw / 2, $y + $mh + 10); } } $x += $mw; } // Draw a border around the map $graph->img->SetColor('black'); $graph->img->Rectangle($xs, $ys, $xs + $mw * $n, $ys + $mh); } // Send back to client $graph->Stroke(); }