code_app/app/scanner/dialog_imgproc_adjust.cpp

145 lines
4.2 KiB
C++

#include "dialog_imgproc_adjust.h"
#include "ui_dialog_imgproc_adjust.h"
#include "imgproc/HGImgProc.h"
#include "app_cfg.h"
Dialog_ImgProc_Adjust::Dialog_ImgProc_Adjust(HGImage img, QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog_ImgProc_Adjust)
{
ui->setupUi(this);
m_base_widget = new Widget_Imgproc_Base(this);
reinterpret_cast<QVBoxLayout*>(this->layout())->insertWidget(2, m_base_widget);
connect(m_base_widget, SIGNAL(brightness_change(int)), this, SLOT(on_brightness_change(int)));
connect(m_base_widget, SIGNAL(contrast_change(int)), this, SLOT(on_contrast_change(int)));
connect(m_base_widget, SIGNAL(gamma_change(double)), this, SLOT(on_gamma_change(double)));
ui->view_before->addImage(img);
ui->view_after->addImage(img);
m_brightness = getCfgValue("adjust", "brightness", 0);
m_base_widget->setBrightness(m_brightness);
m_contrast = getCfgValue("adjust", "contrast", 0);
m_base_widget->setContrast(m_contrast);
QString gamma = getCfgValue("adjust", "gamma", QString("1.0"));
m_gamma = atof(gamma.toStdString().c_str());
m_base_widget->setGamma(m_gamma);
ui->cbtn_preview->setChecked(getCfgValue("adjust", "preview", false));
ui->cbtn_applyImg->setChecked(getCfgValue("adjust", "applyImg", false));
ui->gbox_before->setVisible(ui->cbtn_preview->isChecked());
ui->gbox_after->setVisible(ui->cbtn_preview->isChecked());
ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("ok"));
ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("cancel"));
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setText(tr("restore default"));
}
Dialog_ImgProc_Adjust::~Dialog_ImgProc_Adjust()
{
delete ui;
}
HGImage Dialog_ImgProc_Adjust::getBeforeImage()
{
HGImage img = nullptr;
ui->view_before->getImage(&img);
return img;
}
HGImage Dialog_ImgProc_Adjust::getAfterImage()
{
HGImage img = nullptr;
ui->view_after->getImage(&img);
return img;
}
void Dialog_ImgProc_Adjust::on_brightness_change(int value)
{
m_brightness = value;
process();
}
void Dialog_ImgProc_Adjust::on_contrast_change(int value)
{
m_contrast = value;
process();
}
void Dialog_ImgProc_Adjust::on_gamma_change(double value)
{
m_gamma = value;
process();
}
void Dialog_ImgProc_Adjust::on_cbtn_preview_toggled(bool checked)
{
reinterpret_cast<QVBoxLayout*>(this->layout())->setStretch(1, checked ? 1 : 0);
ui->gbox_before->setVisible(checked);
ui->gbox_after->setVisible(checked);
}
void Dialog_ImgProc_Adjust::on_cbtn_applyImg_toggled(bool checked)
{
HGImage img = nullptr;
if (checked)
ui->view_after->getImage(&img);
else
ui->view_before->getImage(&img);
assert(nullptr != img);
emit applyToImage(img);
}
void Dialog_ImgProc_Adjust::on_buttonBox_clicked(QAbstractButton *button)
{
if (ui->buttonBox->standardButton(button) == QDialogButtonBox::RestoreDefaults)
{
m_base_widget->setDefault();
m_brightness = 0;
m_contrast = 0;
m_gamma = 1.0;
process();
}
}
void Dialog_ImgProc_Adjust::process()
{
HGImage img = nullptr;
ui->view_before->getImage(&img);
assert(nullptr != img);
HGImageInfo imgInfo;
HGBase_GetImageInfo(img, &imgInfo);
HGImage destImg = nullptr;
HGBase_CreateImage(imgInfo.width, imgInfo.height, imgInfo.type, imgInfo.origin, &destImg);
if (nullptr != destImg)
{
HGImgProc_ImageAdjustColors(img, destImg, m_brightness, m_contrast, (HGFloat)m_gamma);
ui->view_after->addImage(destImg);
HGBase_DestroyImage(destImg);
if (ui->cbtn_applyImg->isChecked())
{
HGImage emitImg = nullptr;
ui->view_after->getImage(&emitImg);
assert(nullptr != emitImg);
emit applyToImage(emitImg);
}
}
}
void Dialog_ImgProc_Adjust::on_buttonBox_accepted()
{
saveCfgValue("adjust", "preview", ui->cbtn_preview->isChecked());
saveCfgValue("adjust", "applyImg", ui->cbtn_applyImg->isChecked());
saveCfgValue("adjust", "brightness", m_brightness);
saveCfgValue("adjust", "contrast", m_contrast);
char gamma[32];
sprintf(gamma, "%f", m_gamma);
saveCfgValue("adjust", "gamma", QString(gamma));
}