Simple grey world white balance
This commit is contained in:
@@ -353,6 +353,8 @@ void ImageWidget::paintGL()
|
||||
m_program->setUniformValue("zoom", 1.0f/m_scale);
|
||||
m_program->setUniformValue("bw", m_bwImg && !m_superpixel);
|
||||
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);
|
||||
#ifdef COLOR_MANAGMENT
|
||||
m_program->setUniformValue("srgb", m_srgb);
|
||||
#endif
|
||||
@@ -642,6 +644,19 @@ void ImageWidget::debayer()
|
||||
f->glGenerateMipmap(GL_TEXTURE_2D);
|
||||
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
|
||||
|
||||
int size = std::max(m_imgWidth, m_imgHeight);
|
||||
int level = 0;
|
||||
while(size >>= 1)level++;
|
||||
int w,h;
|
||||
f3->glGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_WIDTH, &w);
|
||||
f3->glGetTexLevelParameteriv(GL_TEXTURE_2D, level, GL_TEXTURE_HEIGHT, &h);
|
||||
uint16_t pixel[w*h*4];
|
||||
f3->glGetTexImage(GL_TEXTURE_2D, level, GL_RGBA, GL_UNSIGNED_SHORT, pixel);
|
||||
float maxRGB = std::max(std::max(pixel[0], pixel[1]), pixel[2]);
|
||||
m_whiteBalance[0] = maxRGB / pixel[0];
|
||||
m_whiteBalance[1] = maxRGB / pixel[1];
|
||||
m_whiteBalance[2] = maxRGB / pixel[2];
|
||||
}
|
||||
|
||||
ImageScrollAreaGL::ImageScrollAreaGL(Database *database, QWidget *parent) : QWidget(parent)
|
||||
|
||||
Reference in New Issue
Block a user