Add bayer mask selection
This commit is contained in:
@@ -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 ¶ms)
|
void ImageWidget::setMTFParams(const MTFParam ¶ms)
|
||||||
{
|
{
|
||||||
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);
|
||||||
|
|
||||||
|
|||||||
@@ -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 ¶ms);
|
void setMTFParams(const MTFParam ¶ms);
|
||||||
void setOffset(float dx, float dy);
|
void setOffset(float dx, float dy);
|
||||||
|
|||||||
+1
-1
Submodule libXISF updated: 8a1f305cc7...aa356443d3
@@ -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())
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user