code_app/app/scanner/widget_imgproc_sidebar.cpp

180 lines
5.4 KiB
C++

#include "widget_imgproc_sidebar.h"
#include "ui_widget_imgproc_sidebar.h"
#include <QPalette>
#include <QPainter>
#include "app_cfg.h"
Widget_Imgproc_SideBar::Widget_Imgproc_SideBar(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget_Imgproc_SideBar)
, m_curImage(NULL)
{
ui->setupUi(this);
updateUiStatus();
connect(ui->slider_brightness, SIGNAL(valueChanged(int)), ui->spin_brightness, SLOT(setValue(int)));
connect(ui->slider_contrast, SIGNAL(valueChanged(int)), ui->spin_contrast, SLOT(setValue(int)));
}
Widget_Imgproc_SideBar::~Widget_Imgproc_SideBar()
{
if (m_curImage != nullptr)
{
HGBase_DestroyImage(m_curImage);
}
delete ui;
}
int Widget_Imgproc_SideBar::getWidth()
{
return this->width();
}
int Widget_Imgproc_SideBar::getHeight()
{
return this->height();
}
void Widget_Imgproc_SideBar::getCurrentImg(HGImage image)
{
HGImageInfo imgInfo;
HGBase_GetImageInfo(image, &imgInfo);
HGBase_CloneImage(image, imgInfo.type, HGBASE_IMGORIGIN_TOP, &m_curImage);
if (NULL == m_curImage)
{
HGBase_DestroyImage(m_curImage);
return;
}
}
void Widget_Imgproc_SideBar::setBrightness(int brightness)
{
ui->spin_brightness->setValue(brightness);
}
void Widget_Imgproc_SideBar::setContrast(int contrast)
{
ui->spin_contrast->setValue(contrast);
}
void Widget_Imgproc_SideBar::setGamma(double gamma)
{
ui->dspin_gamma->setValue(gamma);
}
void Widget_Imgproc_SideBar::paintEvent(QPaintEvent *e)
{
(void)e;
QPainter p(this);
p.fillRect(0, 0, this->width(), this->height(), qRgb(240, 240, 240));
p.setPen(QColor("gray"));
p.drawRect(0, 0, width() -1, height() -1);
}
void Widget_Imgproc_SideBar::updateUiStatus()
{
ui->checkBox_apply->setChecked(getCfgValue("sideBar", "applyImg", true));
ui->checkBox_enhanceText->setChecked(getCfgValue("sideBar", "enhanceText", false));
ui->spin_brightness->setValue(getCfgValue("sideBar", "brightness", 0));
ui->spin_contrast->setValue(getCfgValue("sideBar", "contrast", 0));
QString strGamma = getCfgValue("sideBar", "gamma", QString("1.0"));
double gamma = atof(strGamma.toStdString().c_str());
ui->dspin_gamma->setValue(gamma);
}
void Widget_Imgproc_SideBar::on_spin_brightness_valueChanged(int arg1)
{
ui->slider_brightness->setValue(arg1);
if(ui->checkBox_apply->isChecked())
emit applyToImage(m_curImage, arg1, ui->spin_contrast->value(), ui->dspin_gamma->value());
}
void Widget_Imgproc_SideBar::on_spin_contrast_valueChanged(int arg1)
{
ui->slider_contrast->setValue(arg1);
if(ui->checkBox_apply->isChecked())
emit applyToImage(m_curImage, ui->spin_brightness->value(), arg1, ui->dspin_gamma->value());
}
void Widget_Imgproc_SideBar::on_dspin_gamma_valueChanged(double arg1)
{
ui->slider_gamma->setValue(static_cast<int>(arg1 * 100));
if(ui->checkBox_apply->isChecked())
emit applyToImage(m_curImage, ui->spin_brightness->value(), ui->spin_contrast->value(), arg1);
}
void Widget_Imgproc_SideBar::on_slider_gamma_valueChanged(int value)
{
ui->dspin_gamma->setValue(static_cast<double>(value / 100.0));
}
void Widget_Imgproc_SideBar::on_checkBox_apply_toggled(bool checked)
{
if(checked)
emit applyToImage(m_curImage, ui->spin_brightness->value(), ui->spin_contrast->value(), ui->dspin_gamma->value());
}
void Widget_Imgproc_SideBar::on_pbtn_restoreDefault_clicked()
{
ui->spin_brightness->setValue(0);
ui->spin_contrast->setValue(0);
ui->dspin_gamma->setValue(1.0);
ui->checkBox_apply->setChecked(true);
ui->checkBox_enhanceText->setChecked(false);
if(ui->checkBox_apply->isChecked())
emit applyToImage(m_curImage, ui->spin_brightness->value(), ui->spin_contrast->value(), ui->dspin_gamma->value());
}
void Widget_Imgproc_SideBar::on_pbtn_ok_clicked()
{
saveCfgValue("sideBar", "applyImg", ui->checkBox_apply->isChecked());
saveCfgValue("sideBar", "enhanceText", ui->checkBox_enhanceText->isChecked());
saveCfgValue("sideBar", "brightness", ui->spin_brightness->value());
saveCfgValue("sideBar", "contrast", ui->spin_contrast->value());
char gamma[32];
sprintf(gamma, "%f", ui->dspin_gamma->value());
saveCfgValue("sideBar", "gamma", QString(gamma));
if (ui->checkBox_enhanceText->isChecked())
{
HGUInt xDpi = 0;
HGUInt yDpi = 0;
HGBase_GetImageDpi(m_curImage, &xDpi, &yDpi);
HGImageInfo imgInfo;
HGBase_GetImageInfo(m_curImage, &imgInfo);
HGUInt width = imgInfo.width;
HGUInt height = imgInfo.height;
HGImage destImage = nullptr;
HGBase_CreateImage(width, height, imgInfo.type, HGBASE_IMGORIGIN_TOP, &destImage);
if (NULL == destImage)
{
HGBase_DestroyImage(destImage);
return;
}
HGImgProc_ImageBinarization(m_curImage, destImage, HGIMGPROC_THRESHTYPE_BINARY, 40, 51, 41);
if (nullptr != destImage)
{
HGBase_SetImageDpi(destImage, xDpi, yDpi);
emit applyToImage(destImage, ui->spin_brightness->value(), ui->spin_contrast->value(), ui->dspin_gamma->value());
HGBase_DestroyImage(destImage);
}
}
else
{
emit applyToImage(m_curImage, ui->spin_brightness->value(), ui->spin_contrast->value(), ui->dspin_gamma->value());
}
emit finish();
}
void Widget_Imgproc_SideBar::on_pbtn_cancel_clicked()
{
updateUiStatus();
emit finish();
}