diff --git a/falsecolor.png b/falsecolor.png
new file mode 100644
index 0000000..144ff55
Binary files /dev/null and b/falsecolor.png differ
diff --git a/imagescrollareagl.cpp b/imagescrollareagl.cpp
index cdf5cc6..d03b2f8 100644
--- a/imagescrollareagl.cpp
+++ b/imagescrollareagl.cpp
@@ -274,6 +274,12 @@ void ImageWidget::invert(bool enable)
update();
}
+void ImageWidget::falseColor(bool enable)
+{
+ m_falseColor = enable;
+ update();
+}
+
QImage ImageWidget::renderToImage()
{
if(m_imgWidth < 0)return QImage();
@@ -402,6 +408,7 @@ void ImageWidget::paintGL()
m_program->setUniformValue("mtf_param", m_low, m_mid, m_high);
m_program->setUniformValue("zoom", 1.0f/m_scale);
m_program->setUniformValue("bw", m_bwImg && !m_superpixel);
+ m_program->setUniformValue("false_color", m_falseColor && m_bwImg);
m_program->setUniformValue("invert", m_invert);
if(m_superpixel)m_program->setUniformValue("whiteBalance", m_whiteBalance[0], m_whiteBalance[1], m_whiteBalance[2]);
else m_program->setUniformValue("whiteBalance", 1.0f, 1.0f, 1.0f);
diff --git a/imagescrollareagl.h b/imagescrollareagl.h
index adf7656..8b2c7a9 100644
--- a/imagescrollareagl.h
+++ b/imagescrollareagl.h
@@ -57,6 +57,7 @@ class ImageWidget : public QOpenGLWidget
float m_whiteBalance[3] = {1.0f, 1.0f, 1.0f};
bool m_blockRepaint;
bool m_bwImg;
+ bool m_falseColor = false;
bool m_invert;
bool m_superpixel;
bool m_showThumbnails;
@@ -85,6 +86,7 @@ public slots:
void setOffset(float dx, float dy);
void superPixel(bool enable);
void invert(bool enable);
+ void falseColor(bool enable);
QImage renderToImage();
void thumbnailLoaded(const Image *image);
void showThumbnail(bool enable);
diff --git a/mainwindow.cpp b/mainwindow.cpp
index e6bc48c..09f2dd6 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -84,6 +84,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
connect(m_stretchPanel, &StretchToolbar::autoStretch, [&](){ m_stretchPanel->stretchImage(m_ringList->currentImage().get()); });
connect(m_stretchPanel, &StretchToolbar::invert, m_imageGL->imageWidget(), &ImageWidget::invert);
connect(m_stretchPanel, &StretchToolbar::superPixel, m_imageGL->imageWidget(), &ImageWidget::superPixel);
+ connect(m_stretchPanel, &StretchToolbar::falseColor, m_imageGL->imageWidget(), &ImageWidget::falseColor);
m_ringList = new ImageRingList(m_database, nameFilter, this);
m_filesystem = new FilesystemWidget(m_ringList, this);
diff --git a/resources.qrc b/resources.qrc
index cb8790e..a2e2a7b 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -17,14 +17,15 @@
shaders/thumb.vert
shaders/debayer.frag
shaders/debayer.vert
+ falsecolor.png
-
+
about/help_en
-
+
about/help_sk
-
+
about/help_fr
diff --git a/shaders/image.frag b/shaders/image.frag
index d8c7371..a6a86bd 100644
--- a/shaders/image.frag
+++ b/shaders/image.frag
@@ -5,6 +5,7 @@ uniform vec3 mtf_param;
uniform bool bw;
uniform bool invert;
uniform bool srgb;
+uniform bool false_color;
uniform vec3 whiteBalance;
in vec2 qt_TexCoord0;
layout(location = 0) out vec4 color;
@@ -23,6 +24,20 @@ vec4 MTF(vec4 x, vec3 m)
return ((m.y - 1) * x) / ((2 * m.y - 1) * x - m.y);
}
+vec3 falsecolor(float color)
+{
+ const vec3 pallete[] = vec3[](
+ vec3(1.0, 0.0, 1.0), //magneta
+ vec3(0.0, 0.0, 1.0), //blue
+ vec3(0.0, 1.0, 1.0), //cyan
+ vec3(0.0, 1.0, 0.0), //green
+ vec3(1.0, 1.0, 0.0), //yellow
+ vec3(1.0, 0.0, 0.0), vec3(1.0, 0.0, 0.0));//red
+ color *= 5.0;
+ int i = int(color);
+ return mix(pallete[i], pallete[i+1], fract(color));
+}
+
vec3 checker()
{
vec2 pattern = fract(gl_FragCoord.xy * 0.0625) - 0.5;
@@ -34,6 +49,7 @@ void main(void)
color = texture(qt_Texture0, qt_TexCoord0);
if(bw)color = color.rrra;
color = MTF(color, mtf_param);
+ if(false_color)color.rgb = falsecolor(color.r);
if(invert)color.rgb = vec3(1.0) - color.rgb;
diff --git a/stretchtoolbar.cpp b/stretchtoolbar.cpp
index 8885588..1bd364a 100644
--- a/stretchtoolbar.cpp
+++ b/stretchtoolbar.cpp
@@ -34,6 +34,10 @@ StretchToolbar::StretchToolbar(QWidget *parent) : QToolBar(tr("Stretch toolbar")
invertButton->setCheckable(true);
connect(invertButton, SIGNAL(toggled(bool)), this, SIGNAL(invert(bool)));
+ QAction *falseColorButton = addAction(QIcon(":/falsecolor.png"), tr("False color"));
+ falseColorButton->setCheckable(true);
+ connect(falseColorButton, SIGNAL(toggled(bool)), this, SIGNAL(falseColor(bool)));
+
QAction *superPixelButton = addAction(QIcon(":/bayer.png"), tr("Debayer CFA"));
superPixelButton->setCheckable(true);
connect(superPixelButton, SIGNAL(toggled(bool)), this, SIGNAL(superPixel(bool)));
diff --git a/stretchtoolbar.h b/stretchtoolbar.h
index c07e343..95d1152 100644
--- a/stretchtoolbar.h
+++ b/stretchtoolbar.h
@@ -22,6 +22,7 @@ signals:
void autoStretch();
void invert(bool enable);
void superPixel(bool enable);
+ void falseColor(bool enable);
};
#endif // STRETCHTOOLBAR_H