Add bayer mask selection

This commit is contained in:
2024-01-08 15:41:08 +01:00
parent 8fc2078a3a
commit 67355a82b7
5 changed files with 51 additions and 2 deletions
+13
View File
@@ -215,6 +215,18 @@ QVector2D ImageWidget::getImagePixelCoord(const QVector2D &pos)
return (pos + offset) / m_scale; return (pos + offset) / m_scale;
} }
void ImageWidget::setBayerMask(int mask)
{
m_firstRed[0] = mask & 0x1;
m_firstRed[1] = (mask & 0x2) >> 1;
if(m_debayerTex)
{
f->glDeleteTextures(1, &m_debayerTex);
m_debayerTex = 0;
}
update();
}
void ImageWidget::setMTFParams(const MTFParam &params) void ImageWidget::setMTFParams(const MTFParam &params)
{ {
m_mtfParams = params; m_mtfParams = params;
@@ -684,6 +696,7 @@ void ImageWidget::debayer()
f->glViewport(0, 0, m_imgWidth, m_imgHeight); f->glViewport(0, 0, m_imgWidth, m_imgHeight);
m_debayerProgram->bind(); m_debayerProgram->bind();
f->glUniform2i(m_debayerProgram->uniformLocation("firstRed"), m_firstRed[0], m_firstRed[1]);
m_image->bind(0); m_image->bind(0);
f->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); f->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+2
View File
@@ -65,6 +65,7 @@ class ImageWidget : public QOpenGLWidget
int m_thumbnailCount = 0; int m_thumbnailCount = 0;
int m_maxTextureSize = 0; int m_maxTextureSize = 0;
int m_maxArrayLayers = 0; int m_maxArrayLayers = 0;
int m_firstRed[2] = {0, 0};
QVector<ImageThumb> m_thumnails; QVector<ImageThumb> m_thumnails;
Database *m_database = nullptr; Database *m_database = nullptr;
QPointF m_lastPos; QPointF m_lastPos;
@@ -79,6 +80,7 @@ public:
void blockRepaint(bool block); void blockRepaint(bool block);
void allocateThumbnails(const QStringList &paths); void allocateThumbnails(const QStringList &paths);
QVector2D getImagePixelCoord(const QVector2D &pos); QVector2D getImagePixelCoord(const QVector2D &pos);
void setBayerMask(int mask);
public slots: public slots:
void setMTFParams(const MTFParam &params); void setMTFParams(const MTFParam &params);
void setOffset(float dx, float dy); void setOffset(float dx, float dy);
+1 -1
Submodule libXISF updated: 8a1f305cc7...aa356443d3
+33
View File
@@ -173,6 +173,26 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
viewMenu->addAction(tr("Zoom Out"), m_imageGL, SLOT(zoomOut()), QKeySequence::ZoomOut); viewMenu->addAction(tr("Zoom Out"), m_imageGL, SLOT(zoomOut()), QKeySequence::ZoomOut);
viewMenu->addAction(tr("Best Fit"), m_imageGL, SLOT(bestFit()), QKeySequence("Ctrl+1")); viewMenu->addAction(tr("Best Fit"), m_imageGL, SLOT(bestFit()), QKeySequence("Ctrl+1"));
viewMenu->addAction(tr("100%"), m_imageGL, SLOT(oneToOne())); viewMenu->addAction(tr("100%"), m_imageGL, SLOT(oneToOne()));
viewMenu->addSeparator();
QMenu *bayerMenu = viewMenu->addMenu(tr("Bayer mask"));
QActionGroup *bayerActionGroup = new QActionGroup(this);
QAction *rggbAction = bayerActionGroup->addAction(tr("RGGB"));//0 0
QAction *grbgAction = bayerActionGroup->addAction(tr("GRBG"));//1 0
QAction *gbrgAction = bayerActionGroup->addAction(tr("GBRG"));//0 1
QAction *bggrAction = bayerActionGroup->addAction(tr("BGGR"));//1 1
rggbAction->setCheckable(true); rggbAction->setData(0);
grbgAction->setCheckable(true); grbgAction->setData(1);
gbrgAction->setCheckable(true); gbrgAction->setData(2);
bggrAction->setCheckable(true); bggrAction->setData(3);
bayerMenu->addActions({rggbAction, grbgAction, gbrgAction, bggrAction});
viewMenu->addMenu(bayerMenu);
connect(bayerActionGroup, &QActionGroup::triggered, [this](QAction *action){
int data = action->data().toInt();
m_imageGL->imageWidget()->setBayerMask(data);
QSettings settings;
settings.setValue("mainwindow/bayermask", data);
});
QAction *thumbnailsAction = viewMenu->addAction(tr("Thumbnails"), [this](bool checked){ QAction *thumbnailsAction = viewMenu->addAction(tr("Thumbnails"), [this](bool checked){
if(SettingsDialog::loadThumbsizes())m_ringList->clearThumbnails(); if(SettingsDialog::loadThumbsizes())m_ringList->clearThumbnails();
m_imageGL->imageWidget()->allocateThumbnails(m_ringList->imageNames()); m_imageGL->imageWidget()->allocateThumbnails(m_ringList->imageNames());
@@ -237,6 +257,19 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
QSettings settings; QSettings settings;
restoreGeometry(settings.value("mainwindow/geometry").toByteArray()); restoreGeometry(settings.value("mainwindow/geometry").toByteArray());
restoreState(settings.value("mainwindow/state").toByteArray()); restoreState(settings.value("mainwindow/state").toByteArray());
int bayermask = settings.value("mainwindow/bayermask", 0).toInt();
switch(bayermask)
{
default:
case 0:
rggbAction->setChecked(true); break;
case 1:
grbgAction->setChecked(true); break;
case 2:
gbrgAction->setChecked(true); break;
case 3:
bggrAction->setChecked(true); break;
}
QStringList standardLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation); QStringList standardLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
if(standardLocations.size()) if(standardLocations.size())
+2 -1
View File
@@ -1,6 +1,7 @@
#version 330 #version 330
uniform sampler2D qt_Texture0; uniform sampler2D qt_Texture0;
uniform ivec2 firstRed;
in vec2 qt_TexCoord0; in vec2 qt_TexCoord0;
in vec2 center; in vec2 center;
layout(location = 0) out vec4 color; layout(location = 0) out vec4 color;
@@ -11,7 +12,7 @@ void main(void)
{ {
ivec2 texSize = textureSize(qt_Texture0, 0); ivec2 texSize = textureSize(qt_Texture0, 0);
ivec2 icenter = ivec2(center); ivec2 icenter = ivec2(center);
ivec2 alternate = icenter % 2; ivec2 alternate = (icenter + firstRed) % 2;
// cross, checker, theta, phi // cross, checker, theta, phi
const vec4 kA = vec4(-1.0, -1.5, 0.5, -1.0) / 8.0; const vec4 kA = vec4(-1.0, -1.5, 0.5, -1.0) / 8.0;