From ab245f04847a75926563655f70b9a54c62af5077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Fri, 2 Jun 2023 20:41:34 +0200 Subject: [PATCH] Add false color rendering --- falsecolor.png | Bin 0 -> 947 bytes imagescrollareagl.cpp | 7 +++++++ imagescrollareagl.h | 2 ++ mainwindow.cpp | 1 + resources.qrc | 7 ++++--- shaders/image.frag | 16 ++++++++++++++++ stretchtoolbar.cpp | 4 ++++ stretchtoolbar.h | 1 + 8 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 falsecolor.png diff --git a/falsecolor.png b/falsecolor.png new file mode 100644 index 0000000000000000000000000000000000000000..144ff55661cec213e05e6c6ea3003624c269d7df GIT binary patch literal 947 zcmV;k15EshP)EX>4Tx04R}tkv&MmKpe$iQ?(+M4t5Z6$WWau_=PxX6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRAQI0o!?cOliKjMg zgY!Odl$B(a_?&peqze*1a$WKGjdRgufoDd|OnQzuN-P%JSZQNcGBx5!;+U%GlrLmG zRyl8R*2-1ZyeEHQIIk}+ah>KMl32hZB#2N@#Rkf-5vNrr#X_3)6F&X{*DsMvA=d^N zIp$G;2HEw4|H1EWt-{2(mlRF_oiC2_F$9Emfkw@7zKJNR7l5_Ry$HdF%Xls$WU_uO5py7AvDm#Aw-e9#QQbzWHRq#dv|3?`}hl;fiv&{ zTrR#&zzgsSyaR8?@A>DL^?CV!!uRdvZQ|+6&pN}f4BoD^{JTfY?}#*be{Xq@`y%E= z>h?s~h)aNCk(%r4EaeT6XYmNYArW71nZC*$j%qEWz!FM^^cfOWE@G{qJv(*PDW_E+ zEP%@ypqo?!+*8O8Yjb7hlDcwK-vC-@s&buU4Ld?Iq(xuB?YX)-IdKx9f(#Kx8gyVZ z%8f^A8sv^a0W9tVpDsG!tawb3)s+^kVj>(TFjfXKP$Qe2_6|^(okC1TqT3`Pl{R}- z2fIw@L~1SO@_y&g7a(~r>VP$Le!~0+C9-?cJgdsHy^OB=!hoS!feqRD;2pZm1yQrr{LETsP#>i;8xR-os`;T;f~p zD(a3!oiw^IHg%Vs(jUyf+z!uG9)^*QpmM{s3v5 VwobUc1B3to002ovPDHLkV1m_Tp1lA7 literal 0 HcmV?d00001 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