Skip to content
Snippets Groups Projects
Commit 936c1f4f authored by ariotte's avatar ariotte
Browse files

prepared algorithm for custom pseudo color

parent a94aa2cb
No related branches found
No related tags found
No related merge requests found
...@@ -33,16 +33,27 @@ bool PseudoColorOp::needCurrentImg() const { ...@@ -33,16 +33,27 @@ bool PseudoColorOp::needCurrentImg() const {
return true; 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>&) { void PseudoColorOp::operator()(const imagein::Image* image, const std::map<const imagein::Image*, std::string>&) {
GrayscaleImage* tmpImg = Converter<GrayscaleImage>::convert(*image); GrayscaleImage* tmpImg = Converter<GrayscaleImage>::convert(*image);
Image* resImg = new Image(tmpImg->getWidth(), tmpImg->getHeight(), 3); 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 j = 0; j < tmpImg->getHeight(); ++j) {
for(unsigned int i = 0; i < tmpImg->getWidth(); ++i) { for(unsigned int i = 0; i < tmpImg->getWidth(); ++i) {
Image::depth_t value = tmpImg->getPixel(i, j); Image::depth_t value = tmpImg->getPixel(i, j);
const int nhue = 256;
const int ngrad = ceil(256. / (double)nhue); const int ngrad = ceil(255. / (double)nhue);
const int hue = floor(value * nhue / 256); /* € [0, nhue[ */ const int hue = getHue(value, nhue); /* € [0, nhue[ */
const int grad = value - ceil((double)hue * 256. / (double)nhue); /* € [0, ngrad[ */ 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)); 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, 0, color.red());
resImg->setPixel(i, j, 1, color.green()); resImg->setPixel(i, j, 1, color.green());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment