QImage DistanceMapGenerationTool::ConvertMapToImage(const QSharedPointer<Map>& map, ccColorScale::Shared colorScale, unsigned colorScaleSteps/*=ccColorScale::MAX_STEPS*/) { if (!map || !colorScale) return QImage(); //create image QImage image(QSize(map->xSteps,map->ySteps),QImage::Format_ARGB32); if (image.isNull()) { //not enough memory! return QImage(); } //convert map cells to pixels { bool csIsRelative = colorScale->isRelative(); const MapCell* cell = &map->at(0); for (unsigned j=0; j<map->ySteps; ++j) { //for each column for (unsigned i=0; i<map->xSteps; ++i, ++cell) { const ColorCompType* rgb = ccColor::lightGrey.rgba; if (cell->count != 0) { double relativePos = csIsRelative ? (cell->value - map->minVal) / (map->maxVal - map->minVal) : colorScale->getRelativePosition(cell->value); if (relativePos < 0.0) relativePos = 0.0; else if (relativePos > 1.0) relativePos = 1.0; rgb = colorScale->getColorByRelativePos(relativePos,colorScaleSteps,ccColor::lightGrey.rgba); } //DGM FIXME: QImage::sePixel is quite slow! image.setPixel( static_cast<int>(i), static_cast<int>(j), qRgb(rgb[0],rgb[1],rgb[2]) ); } } } return image; }
void ccScalarField::setColorScale(ccColorScale::Shared scale) { if (m_colorScale != scale) { bool wasAbsolute = (m_colorScale && !m_colorScale->isRelative()); bool isAbsolute = (scale && !scale->isRelative()); m_colorScale = scale; if (isAbsolute) m_symmetricalScale = false; if (isAbsolute || wasAbsolute != isAbsolute) updateSaturationBounds(); m_modified = true; } }