diff --git a/app/Operations/PseudoColorOp.cpp b/app/Operations/PseudoColorOp.cpp index feb5b851a845b0b9f2a2ca9256ac7b3b0649bce5..6a1eaf46820ea66d82c9dee83b7f04fe13884e17 100644 --- a/app/Operations/PseudoColorOp.cpp +++ b/app/Operations/PseudoColorOp.cpp @@ -33,16 +33,27 @@ bool PseudoColorOp::needCurrentImg() const { return true; } +static int getLinearHue(int value, int nhue){ + return floor(value * nhue / 255); +} + void PseudoColorOp::operator()(const imagein::Image* image, const std::map<const imagein::Image*, std::string>&) { - GrayscaleImage* tmpImg = Converter<GrayscaleImage>::convert(*image); - Image* resImg = new Image(tmpImg->getWidth(), tmpImg->getHeight(), 3); + GrayscaleImage* tmpImg = Converter<GrayscaleImage>::convert(*image); + Image* resImg = new Image(tmpImg->getWidth(), tmpImg->getHeight(), 3); + + int nhue = 255; // changer cette valeur en fonction de la fenêtre de dialog + + int (*getHue)(int a, int b); + + getHue = getLinearHue; + for(unsigned int j = 0; j < tmpImg->getHeight(); ++j) { for(unsigned int i = 0; i < tmpImg->getWidth(); ++i) { Image::depth_t value = tmpImg->getPixel(i, j); - const int nhue = 256; - const int ngrad = ceil(256. / (double)nhue); - const int hue = floor(value * nhue / 256); /* € [0, nhue[ */ - const int grad = value - ceil((double)hue * 256. / (double)nhue); /* € [0, ngrad[ */ + + const int ngrad = ceil(255. / (double)nhue); + const int hue = getHue(value, nhue); /* € [0, nhue[ */ + const int grad = value - ceil((double)hue * 255 / (double)nhue); /* € [0, ngrad[ */ QColor color = QColor::fromHsl(300 - hue * 300 / nhue, 255, (grad + 1) * 255 / (ngrad + 1)); resImg->setPixel(i, j, 0, color.red()); resImg->setPixel(i, j, 1, color.green());