解决扫描到功能中,多张合成时,点击继续扫描不会合成到同一个文件的问题
This commit is contained in:
parent
8c0e4bb938
commit
f2660f2f0b
|
@ -0,0 +1,447 @@
|
||||||
|
#include "cutdialog.h"
|
||||||
|
#include "ui_cutdialog.h"
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QToolTip>
|
||||||
|
#include <qpainterpath.h>
|
||||||
|
|
||||||
|
cutDialog::cutDialog(QWidget *parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
ui(new Ui::cutDialog)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
divisor = 8;
|
||||||
|
dpi = 1;
|
||||||
|
sizeType = 0;
|
||||||
|
paperWidth = 185;
|
||||||
|
h_w = 260.0/185.0;
|
||||||
|
sizeRate = 1;
|
||||||
|
paperHeight = paperWidth*h_w;
|
||||||
|
|
||||||
|
this->setFixedSize(paperWidth,paperHeight);
|
||||||
|
setMouseTracking(true);
|
||||||
|
m_startPoint = QPoint(10,10);
|
||||||
|
m_endPoint = QPoint(50,50);
|
||||||
|
m_mouse_down = false;
|
||||||
|
|
||||||
|
initAllCorner();
|
||||||
|
}
|
||||||
|
|
||||||
|
cutDialog::~cutDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::setPaperSize(QString type, const int w)
|
||||||
|
{
|
||||||
|
paperType = type;
|
||||||
|
|
||||||
|
if(paperType == "A3") h_w = 420.0/297;
|
||||||
|
else if(paperType == "A4") h_w = 297.0/210;
|
||||||
|
else if(paperType == std::string("A4横向").c_str()) h_w = 210/297.0;
|
||||||
|
else if(paperType == "A5") h_w = 210.0/148;
|
||||||
|
else if(paperType == std::string("A5横向").c_str()) h_w = 148/210.0;
|
||||||
|
else if(paperType == "A6") h_w = 148.0/105;
|
||||||
|
else if(paperType == std::string("A6横向").c_str()) h_w = 105/148.0;
|
||||||
|
else if(paperType == "B4") h_w = 353.0/250;
|
||||||
|
else if(paperType == "B5") h_w = 250.0/176;
|
||||||
|
else if(paperType == std::string("B5横向").c_str()) h_w = 176/250.0;
|
||||||
|
else if(paperType == "B6") h_w = 176.0/125;
|
||||||
|
else if(paperType == std::string("B6横向").c_str()) h_w = 125/176.0;
|
||||||
|
else if(paperType == std::string("信封").c_str()) h_w = 279.0/210;
|
||||||
|
else if(paperType == std::string("信封横向").c_str()) h_w = 210.0/279;
|
||||||
|
else if(paperType == std::string("双倍信封").c_str()) h_w = 850.0/550;
|
||||||
|
else if(paperType == "Legal") h_w = 2800.0/1700;
|
||||||
|
else if(paperType == std::string("最大尺寸").c_str()) h_w = 3307.0*2/2338;
|
||||||
|
else if(paperType == std::string("匹配原始尺寸").c_str()) {
|
||||||
|
if(dpi == 100.0) h_w = 1795.0/1189;
|
||||||
|
if(dpi == 150.0) h_w = 1795.0/1784;
|
||||||
|
if(dpi == 200.0) h_w = 3307.0/2338;
|
||||||
|
if(dpi == 240.0) h_w = 4308.0/2854;
|
||||||
|
if(dpi == 200.0) h_w = 5385.0/3567;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
if(type.contains("3")) divisor = 2;
|
||||||
|
else if (type.contains("4")) divisor = 4;
|
||||||
|
else if (type.contains("5")) divisor = 6;
|
||||||
|
else if (type.contains("6")) divisor = 8;
|
||||||
|
else divisor = 4;
|
||||||
|
paperWidth = w;
|
||||||
|
if(type.contains(std::string("横向").c_str())) paperWidth = paperWidth*h_w*1.5;
|
||||||
|
double realW = paperWidth;
|
||||||
|
|
||||||
|
if(paperType == "A3" || paperType == std::string("A4横向").c_str()) realRate = 297.0/realW;
|
||||||
|
else if(paperType == "A4" || paperType == std::string("A5横向").c_str()) realRate = 210.0/realW;
|
||||||
|
else if(paperType == "A5" || paperType == std::string("A6横向").c_str()) realRate = 148.0/realW;
|
||||||
|
else if(paperType == "A6") realRate = 105.0/realW;
|
||||||
|
else if(paperType == "B4" || paperType == std::string("B5横向").c_str()) realRate = 250.0/realW;
|
||||||
|
else if(paperType == "B5" || paperType == std::string("B6横向").c_str()) realRate = 176.0/realW;
|
||||||
|
else if(paperType == "B6") realRate = 125.0/realW;
|
||||||
|
else if(paperType == std::string("信封").c_str()) realRate = 216.0/realW;
|
||||||
|
else if(paperType == std::string("信封横向").c_str()) realRate = 279.0/realW;
|
||||||
|
else if(paperType == std::string("双倍信封").c_str()) realRate = 432.0/realW;
|
||||||
|
else if(paperType == "Legal") realRate = 297.0/realW;
|
||||||
|
else if(paperType == std::string("最大尺寸").c_str()) realRate = 297.0/realW;
|
||||||
|
else if(paperType == std::string("匹配原始尺寸").c_str()) {
|
||||||
|
if(dpi == 100.0) realRate = 1189.0*0.039377/dpi/realW;
|
||||||
|
if(dpi == 150.0) realRate = 1784*0.039377/dpi/realW;
|
||||||
|
if(dpi == 200.0) realRate = 2338*0.039377/dpi/realW;
|
||||||
|
if(dpi == 240.0) realRate = 2854*0.039377/dpi/realW;
|
||||||
|
if(dpi == 200.0) realRate = 3567*0.039377/dpi/realW;
|
||||||
|
};
|
||||||
|
|
||||||
|
paperHeight = paperWidth*h_w;
|
||||||
|
this->setFixedSize(paperWidth+4,paperHeight+4);
|
||||||
|
scaleRec = QRectF(0,0,paperWidth,paperHeight+0.5);
|
||||||
|
m_rect = QRectF(m_startPoint,m_endPoint);
|
||||||
|
update();
|
||||||
|
refreshView();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::setDpiValue(const double d)
|
||||||
|
{
|
||||||
|
dpi = d;
|
||||||
|
if(sizeType == PIXEL) sizeRate = 0.03937*dpi;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::setSizeType(const SIZETYPE &t)
|
||||||
|
{
|
||||||
|
sizeType = t;
|
||||||
|
switch (sizeType) {
|
||||||
|
case MILLIM:
|
||||||
|
sizeRate = 1;
|
||||||
|
break;
|
||||||
|
case INCH:
|
||||||
|
sizeRate = 0.03937;
|
||||||
|
break;
|
||||||
|
case PIXEL:
|
||||||
|
sizeRate = 0.03937*dpi;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::setCutRectWidth(double w)
|
||||||
|
{
|
||||||
|
m_endPoint.setX(m_startPoint.x()+scaleRec.width()*w/getPaperSize().width());
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::setCutRectHeight(double h)
|
||||||
|
{
|
||||||
|
m_endPoint.setY(m_startPoint.y()+scaleRec.height()*h/getPaperSize().height());
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::setCutRectStartX(double x)
|
||||||
|
{
|
||||||
|
m_startPoint.setX(scaleRec.width()*x/getPaperSize().width());
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::setCutRectStartY(double y)
|
||||||
|
{
|
||||||
|
m_startPoint.setY(scaleRec.height()*y/getPaperSize().height());
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
QSizeF cutDialog::getPaperSize() const
|
||||||
|
{
|
||||||
|
double realW = paperWidth*realRate*sizeRate;
|
||||||
|
double realH = paperHeight*realRate*sizeRate;
|
||||||
|
return QSizeF(realW,realH);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSizeF cutDialog::getCutRectSize() const
|
||||||
|
{
|
||||||
|
double realCutW = getPaperSize().width()*m_rect.width()/scaleRec.width();
|
||||||
|
double realCutH = getPaperSize().height()*m_rect.height()/scaleRec.height();
|
||||||
|
return QSizeF(realCutW,realCutH);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPointF cutDialog::getCutRectStartPos() const
|
||||||
|
{
|
||||||
|
double realCutX = getPaperSize().width()*m_startPoint.x()/scaleRec.width();
|
||||||
|
double realCutY = getPaperSize().height()*m_startPoint.y()/scaleRec.height();
|
||||||
|
return QPointF(realCutX,realCutY);
|
||||||
|
}
|
||||||
|
|
||||||
|
QRectF cutDialog::getCutRectPixel() const
|
||||||
|
{
|
||||||
|
double x = 0.03937*dpi*paperWidth*realRate*m_startPoint.x()/scaleRec.width();
|
||||||
|
double y = 0.03937*dpi*paperHeight*realRate*m_startPoint.y()/scaleRec.height();
|
||||||
|
double w = 0.03937*dpi*paperWidth*realRate*m_rect.width()/scaleRec.width();
|
||||||
|
double h = 0.03937*dpi*paperHeight*realRate*m_rect.height()/scaleRec.height();
|
||||||
|
return QRectF(x,y,w,h);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::setCutRectPixel(QRectF &rect)
|
||||||
|
{
|
||||||
|
m_startPoint.setX(scaleRec.width()*rect.x()/(paperWidth*realRate*0.03937*dpi));
|
||||||
|
m_startPoint.setY(scaleRec.height()*rect.y()/(paperHeight*realRate*0.03937*dpi));
|
||||||
|
m_endPoint.setX(m_startPoint.x()+scaleRec.width()*rect.width()/(paperWidth*realRate*0.03937*dpi));
|
||||||
|
m_endPoint.setY(m_startPoint.y()+scaleRec.height()*rect.height()/(paperHeight*realRate*0.03937*dpi));
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
int cutDialog::getCutRectRight() const
|
||||||
|
{
|
||||||
|
return getPaperSize().width()*m_rect.right()/scaleRec.right();
|
||||||
|
}
|
||||||
|
|
||||||
|
int cutDialog::getCutRectBottom() const
|
||||||
|
{
|
||||||
|
return getPaperSize().height()*m_rect.bottom()/scaleRec.bottom();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::mousePressEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
int x = event->x()/**paperWidth/width()*/;
|
||||||
|
int y = event->y()/**paperHeight/height()*/;
|
||||||
|
m_moveStart = QPoint(x,y);
|
||||||
|
m_mouse_down = event->button() == Qt::LeftButton;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::mouseMoveEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
int x = event->x()/**paperWidth/width()*/;
|
||||||
|
int y = event->y()/**paperHeight/height()*/;
|
||||||
|
if(m_mouse_down){
|
||||||
|
int dx = m_moveStart.x() - x;
|
||||||
|
int dy = m_moveStart.y() - y;
|
||||||
|
m_moveStart = QPoint(x,y);
|
||||||
|
|
||||||
|
if(m_leftCorn){
|
||||||
|
m_startPoint.setX(x);
|
||||||
|
}else if(m_rightCorn){
|
||||||
|
m_endPoint.setX(x);
|
||||||
|
}else if(m_topCorn){
|
||||||
|
m_startPoint.setY(y);
|
||||||
|
}else if(m_bottomCorn){
|
||||||
|
m_endPoint.setY(y);
|
||||||
|
}else if(m_leftTop){
|
||||||
|
m_startPoint.setX(x);
|
||||||
|
m_startPoint.setY(y);
|
||||||
|
}else if(m_leftBottom){
|
||||||
|
m_startPoint.setX(x);
|
||||||
|
m_endPoint.setY(y);
|
||||||
|
}else if(m_rightTop){
|
||||||
|
m_startPoint.setY(y);
|
||||||
|
m_endPoint.setX(x);
|
||||||
|
}else if(m_rightBottom){
|
||||||
|
m_endPoint.setX(x);
|
||||||
|
m_endPoint.setY(y);
|
||||||
|
}
|
||||||
|
else if(!m_out){
|
||||||
|
if(m_startPoint.x() - dx < 0) dx = 0;
|
||||||
|
if(m_startPoint.y() - dy < 0) dy = 0;
|
||||||
|
if(m_endPoint.x() - dx > scaleRec.right()) dx = 0;
|
||||||
|
if(m_endPoint.y() - dy > scaleRec.bottom()) dy = 0;
|
||||||
|
m_startPoint.setX(m_rect.left()-dx);
|
||||||
|
m_startPoint.setY(m_rect.top()-dy);
|
||||||
|
m_endPoint.setX(m_rect.right()-dx);
|
||||||
|
m_endPoint.setY(m_rect.bottom()-dy);
|
||||||
|
}
|
||||||
|
if(m_startPoint.x()<=0) m_startPoint.setX(0);
|
||||||
|
if(m_startPoint.y()<=0) m_startPoint.setY(0);
|
||||||
|
if(m_endPoint.x()>=scaleRec.width()) m_endPoint.setX(scaleRec.right());
|
||||||
|
if(m_endPoint.y()>=scaleRec.height()) m_endPoint.setY(scaleRec.bottom());
|
||||||
|
|
||||||
|
|
||||||
|
if(qAbs(m_startPoint.x() - m_endPoint.x()) <= 10 || m_startPoint.x() > m_endPoint.x()){
|
||||||
|
m_startPoint.setX(m_rect.left());
|
||||||
|
m_endPoint.setX(m_rect.right());
|
||||||
|
}
|
||||||
|
if(qAbs(m_startPoint.y() - m_endPoint.y()) <= 10 || m_startPoint.y() > m_endPoint.y()){
|
||||||
|
m_startPoint.setY(m_rect.top());
|
||||||
|
m_endPoint.setY(m_rect.bottom());
|
||||||
|
}
|
||||||
|
|
||||||
|
update();
|
||||||
|
}else{
|
||||||
|
mousePosition(QPoint(x,y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::mouseReleaseEvent(QMouseEvent *)
|
||||||
|
{
|
||||||
|
m_mouse_down = false;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::enterEvent(QEvent *)
|
||||||
|
{
|
||||||
|
emit lineEditEnable(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::leaveEvent(QEvent *)
|
||||||
|
{
|
||||||
|
emit lineEditEnable(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::paintEvent(QPaintEvent *)
|
||||||
|
{
|
||||||
|
QPainter painter(this);
|
||||||
|
painter.translate(0,0);
|
||||||
|
|
||||||
|
drawScale(painter);
|
||||||
|
drawCutRect(painter);
|
||||||
|
drawTransparentColor(painter);
|
||||||
|
if(m_mouse_down){
|
||||||
|
if(sizeType == INCH || sizeType == MILLIM){
|
||||||
|
emit cutRectX(QString::number(getCutRectStartPos().x(),'f',2).toDouble());
|
||||||
|
emit cutRectY(QString::number(getCutRectStartPos().y(),'f',2).toDouble());
|
||||||
|
emit cutRectWidth(QString::number(getCutRectSize().width(),'f',2).toDouble());
|
||||||
|
emit cutRectHeight(QString::number(getCutRectSize().height(),'f',2).toDouble());
|
||||||
|
}else{
|
||||||
|
emit cutRectX(double(int(getCutRectStartPos().x())));
|
||||||
|
emit cutRectY(double(int(getCutRectStartPos().y())));
|
||||||
|
emit cutRectWidth(double(int(getCutRectSize().width())));
|
||||||
|
emit cutRectHeight(double(int(getCutRectSize().height())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
painter.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::drawScale(QPainter& painter)
|
||||||
|
{
|
||||||
|
painter.setPen(QPen(Qt::black,1));
|
||||||
|
scaleRec = QRectF(0,0,paperWidth,paperHeight+0.5);
|
||||||
|
painter.drawRect(scaleRec);
|
||||||
|
for(int i = 6 ; i <= paperWidth-6; i++){
|
||||||
|
if(int(paperWidth/2) == i || int(paperWidth/4) == i || int(paperWidth*3/4) == i){
|
||||||
|
painter.setPen(QPen(Qt::gray,1));
|
||||||
|
painter.drawLine(i,0,i,paperHeight);
|
||||||
|
painter.setPen(QPen(Qt::black,1));
|
||||||
|
}
|
||||||
|
if(i%divisor == 0){
|
||||||
|
painter.drawLine(i,paperHeight-4,i,paperHeight);
|
||||||
|
painter.drawLine(i,0,i,4);
|
||||||
|
}
|
||||||
|
if(i%(divisor*5) == 0){
|
||||||
|
painter.drawLine(i,paperHeight-8,i,paperHeight);
|
||||||
|
painter.drawLine(i,0,i,8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i = 6 ; i <= paperHeight-6; i++){
|
||||||
|
if(int(paperHeight/2) == i || int(paperHeight/4) == i || int(paperHeight*3/4) == i){
|
||||||
|
painter.setPen(QPen(Qt::gray,1));
|
||||||
|
painter.drawLine(0,i,paperWidth,i);
|
||||||
|
painter.setPen(QPen(Qt::black,1));
|
||||||
|
}
|
||||||
|
if(i%divisor == 0){
|
||||||
|
painter.drawLine(0,i,4,i);
|
||||||
|
painter.drawLine(paperWidth,i,paperWidth-4,i);
|
||||||
|
}
|
||||||
|
if(i%(divisor*5) == 0){
|
||||||
|
painter.drawLine(0,i,8,i);
|
||||||
|
painter.drawLine(paperWidth,i,paperWidth-8,i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::drawCutRect(QPainter &painter)
|
||||||
|
{
|
||||||
|
painter.setPen(QPen(Qt::green,1));
|
||||||
|
m_rect = QRectF(m_startPoint,m_endPoint);
|
||||||
|
painter.drawRect(m_rect);
|
||||||
|
painter.setPen(QPen(Qt::red,1));
|
||||||
|
painter.setBrush(Qt::red);
|
||||||
|
painter.drawEllipse(m_rect.left()-2,(m_rect.bottom()-m_rect.top())/2+m_rect.top()-2,4,4);
|
||||||
|
painter.drawEllipse(m_rect.left()-2,m_rect.top()-2,4,4);
|
||||||
|
painter.drawEllipse(m_rect.left()-2,m_rect.bottom()-2,4,4);
|
||||||
|
painter.drawEllipse(m_rect.right()-2,m_rect.top()-2,4,4);
|
||||||
|
painter.drawEllipse(m_rect.right()-2,m_rect.bottom()-2,4,4);
|
||||||
|
painter.drawEllipse(m_rect.right()-2,(m_rect.bottom()-m_rect.top())/2+m_rect.top()-2,4,4);
|
||||||
|
painter.drawEllipse((m_rect.right()-m_rect.left())/2+m_rect.left()-2,m_rect.top()-2,4,4);
|
||||||
|
painter.drawEllipse((m_rect.right()-m_rect.left())/2+m_rect.left()-2,m_rect.bottom()-2,4,4);
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::drawTransparentColor(QPainter &painter)
|
||||||
|
{
|
||||||
|
QPainterPath painterPath;
|
||||||
|
QPainterPath p;
|
||||||
|
p.addRect(scaleRec);
|
||||||
|
painterPath.addRect(m_rect);
|
||||||
|
QPainterPath drawPath =p.subtracted(painterPath);
|
||||||
|
painter.setOpacity(0.7);
|
||||||
|
painter.fillPath(drawPath,QBrush(Qt::gray));
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::mousePosition(const QPoint& e)
|
||||||
|
{
|
||||||
|
initAllCorner();
|
||||||
|
QRectF r = QRectF(m_rect);
|
||||||
|
int x = e.x();
|
||||||
|
int y = e.y();
|
||||||
|
m_left = qAbs(x - r.left()) < 5;
|
||||||
|
m_right = qAbs(x - r.right()) < 5;
|
||||||
|
m_bottom = qAbs(y - r.bottom()) < 5;
|
||||||
|
m_top = qAbs(y - r.top()) < 5;
|
||||||
|
m_out = r.left()-x>=5 || x-r.right()>=5 || r.top()-y>=5 || y-r.bottom()>=5;
|
||||||
|
bool lorr = m_left | m_right;
|
||||||
|
bool torb = m_top | m_bottom;
|
||||||
|
if(lorr && torb)
|
||||||
|
{
|
||||||
|
if((m_left && m_top) || (m_right && m_bottom))
|
||||||
|
setCursor(Qt::SizeFDiagCursor);
|
||||||
|
else
|
||||||
|
setCursor(Qt::SizeBDiagCursor);
|
||||||
|
}
|
||||||
|
else if(lorr)
|
||||||
|
setCursor(Qt::SizeHorCursor);
|
||||||
|
else if(torb)
|
||||||
|
setCursor(Qt::SizeVerCursor);
|
||||||
|
else if(!m_out)
|
||||||
|
{
|
||||||
|
setCursor(Qt::SizeAllCursor);
|
||||||
|
m_bottom = m_left = m_right = m_top = false;
|
||||||
|
}else if(m_out){
|
||||||
|
setCursor(Qt::ArrowCursor);
|
||||||
|
m_bottom = m_left = m_right = m_top = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_left && m_top) m_leftTop = true;
|
||||||
|
else if(m_left && m_bottom) m_leftBottom = true;
|
||||||
|
else if(m_right && m_top) m_rightTop = true;
|
||||||
|
else if(m_right && m_bottom) m_rightBottom = true;
|
||||||
|
else if(m_left && !m_top && !m_bottom) m_leftCorn = true;
|
||||||
|
else if(m_right && !m_top && !m_bottom) m_rightCorn = true;
|
||||||
|
else if(m_top && !m_left && !m_right) m_topCorn = true;
|
||||||
|
else if(m_bottom && !m_left && !m_right) m_bottomCorn = true;
|
||||||
|
else initAllCorner();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::refreshView()
|
||||||
|
{
|
||||||
|
if(sizeType == INCH){
|
||||||
|
emit cutRectX(QString::number(getCutRectStartPos().x(),'f',2).toDouble());
|
||||||
|
emit cutRectY(QString::number(getCutRectStartPos().y(),'f',2).toDouble());
|
||||||
|
emit cutRectWidth(QString::number(getCutRectSize().width(),'f',2).toDouble());
|
||||||
|
emit cutRectHeight(QString::number(getCutRectSize().height(),'f',2).toDouble());
|
||||||
|
}else{
|
||||||
|
emit cutRectX(QString::number(getCutRectStartPos().x(),'f',0).toDouble());
|
||||||
|
emit cutRectY(QString::number(getCutRectStartPos().y(),'f',0).toDouble());
|
||||||
|
emit cutRectWidth(double(int(getCutRectSize().width())));
|
||||||
|
emit cutRectHeight(double(int(getCutRectSize().height())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void cutDialog::initAllCorner()
|
||||||
|
{
|
||||||
|
m_left = false;
|
||||||
|
m_right = false;
|
||||||
|
m_bottom = false;
|
||||||
|
m_top = false;
|
||||||
|
m_leftCorn = false;
|
||||||
|
m_rightCorn = false;
|
||||||
|
m_topCorn = false;
|
||||||
|
m_bottomCorn = false;
|
||||||
|
m_leftTop = false;
|
||||||
|
m_leftBottom = false;
|
||||||
|
m_rightTop = false;
|
||||||
|
m_rightBottom = false;
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
#ifndef CUTDIALOG_H
|
||||||
|
#define CUTDIALOG_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QCursor>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class cutDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum SIZETYPE{
|
||||||
|
MILLIM ,
|
||||||
|
INCH,
|
||||||
|
PIXEL
|
||||||
|
};
|
||||||
|
|
||||||
|
class cutDialog : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit cutDialog(QWidget *parent = nullptr);
|
||||||
|
~cutDialog();
|
||||||
|
void setPaperSize(QString type = "A1", const int w = 200);
|
||||||
|
void setDpiValue(const double d);
|
||||||
|
void setSizeType(const SIZETYPE& t);
|
||||||
|
void setCutRectWidth(double w);
|
||||||
|
void setCutRectHeight(double h);
|
||||||
|
void setCutRectStartX(double x);
|
||||||
|
void setCutRectStartY(double y);
|
||||||
|
QSizeF getPaperSize()const;
|
||||||
|
QSizeF getCutRectSize()const;
|
||||||
|
QPointF getCutRectStartPos()const;
|
||||||
|
QRectF getCutRectPixel()const;
|
||||||
|
void setCutRectPixel(QRectF& rect);
|
||||||
|
int getCutRectRight()const;
|
||||||
|
int getCutRectBottom()const;
|
||||||
|
void refreshView();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void cutRectX(double x);
|
||||||
|
void cutRectY(double y);
|
||||||
|
void cutRectWidth(double w);
|
||||||
|
void cutRectHeight(double h);
|
||||||
|
void lineEditEnable(bool b);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void mousePressEvent(QMouseEvent*);
|
||||||
|
void mouseMoveEvent(QMouseEvent*);
|
||||||
|
void mouseReleaseEvent(QMouseEvent*);
|
||||||
|
void enterEvent(QEvent*);
|
||||||
|
void leaveEvent(QEvent*);
|
||||||
|
//void resizeEvent(QResizeEvent*);
|
||||||
|
void paintEvent(QPaintEvent *);
|
||||||
|
void drawScale(QPainter &painter);
|
||||||
|
void drawCutRect(QPainter &painter);
|
||||||
|
void drawTransparentColor(QPainter &painter);
|
||||||
|
void drawPaperSize();
|
||||||
|
void mousePosition(const QPoint &e);
|
||||||
|
void initAllCorner();
|
||||||
|
//void mouseChangeRect(int dx,int dy);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::cutDialog *ui;
|
||||||
|
QPointF m_startPoint;
|
||||||
|
QPointF m_endPoint;
|
||||||
|
QPointF m_moveStart;
|
||||||
|
|
||||||
|
QRectF m_rect;
|
||||||
|
QRectF scaleRec;
|
||||||
|
|
||||||
|
QString paperType;
|
||||||
|
double paperWidth;
|
||||||
|
double paperHeight;
|
||||||
|
int divisor;
|
||||||
|
int sizeType;
|
||||||
|
double dpi;
|
||||||
|
double h_w;
|
||||||
|
double realRate;
|
||||||
|
double sizeRate;
|
||||||
|
|
||||||
|
bool m_mouse_down;
|
||||||
|
bool m_left;
|
||||||
|
bool m_right;
|
||||||
|
bool m_bottom;
|
||||||
|
bool m_top;
|
||||||
|
bool m_leftCorn;
|
||||||
|
bool m_rightCorn;
|
||||||
|
bool m_topCorn;
|
||||||
|
bool m_bottomCorn;
|
||||||
|
bool m_leftTop;
|
||||||
|
bool m_rightTop;
|
||||||
|
bool m_leftBottom;
|
||||||
|
bool m_rightBottom;
|
||||||
|
bool m_out;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CUTDIALOG_H
|
|
@ -0,0 +1,44 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>cutDialog</class>
|
||||||
|
<widget class="QWidget" name="cutDialog">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>321</width>
|
||||||
|
<height>342</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>2</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="baseSize">
|
||||||
|
<size>
|
||||||
|
<width>2</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="mouseTracking">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>cutDialog</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -0,0 +1,217 @@
|
||||||
|
#include "cutpapertool.h"
|
||||||
|
#include "ui_cutpapertool.h"
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QValidator>
|
||||||
|
|
||||||
|
CutPaperTool::CutPaperTool(QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::CutPaperTool)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
connect(ui->widget,SIGNAL(cutRectX(double)),this,SLOT(cutRectXSlot(double)));
|
||||||
|
connect(ui->widget,SIGNAL(cutRectY(double)),this,SLOT(cutRectYSlot(double)));
|
||||||
|
connect(ui->widget,SIGNAL(cutRectWidth(double)),this,SLOT(cutRectWidthSlot(double)));
|
||||||
|
connect(ui->widget,SIGNAL(cutRectHeight(double)),this,SLOT(cutRectHeightSlot(double)));
|
||||||
|
connect(ui->widget,SIGNAL(lineEditEnable(bool)),this,SLOT(lineEditEnableSlot(bool)));
|
||||||
|
//setDpi(200);
|
||||||
|
//setPaperType(200,"A4",400);
|
||||||
|
ui->widget->setSizeType(MILLIM);
|
||||||
|
setSizeLabel();
|
||||||
|
this->setFixedWidth(ui->widget->width()+20);
|
||||||
|
}
|
||||||
|
|
||||||
|
CutPaperTool::~CutPaperTool()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::paintEvent(QPaintEvent *)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::setPaperType(const int d, const QString &t, const int& w)
|
||||||
|
{
|
||||||
|
dpi = d;
|
||||||
|
ui->dpiLab->setText(QString::number(dpi));
|
||||||
|
ui->widget->setDpiValue(dpi);
|
||||||
|
paperType = t;
|
||||||
|
ui->paperLab->setText(paperType);
|
||||||
|
ui->widget->setPaperSize(paperType,w);
|
||||||
|
//ui->widget->refreshView();
|
||||||
|
setSizeLabel();
|
||||||
|
this->setFixedWidth(ui->widget->width()+20);
|
||||||
|
setSizeInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
QRectF CutPaperTool::getCutRectPixel()
|
||||||
|
{
|
||||||
|
return QRectF(ui->widget->getCutRectPixel());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::setCutRect(QRectF &rect)
|
||||||
|
{
|
||||||
|
ui->widget->setCutRectPixel(rect);
|
||||||
|
ui->startXEdt->setText(QString::number(rect.x()/dpi/0.03937));
|
||||||
|
ui->startYEdt->setText(QString::number(rect.y()/dpi/0.03937));
|
||||||
|
ui->rectWidth->setText(QString::number(rect.width()/dpi/0.03937));
|
||||||
|
ui->rectHeight->setText(QString::number(rect.height()/dpi/0.03937));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::setSizeLabel()
|
||||||
|
{
|
||||||
|
QString wSize;
|
||||||
|
QString hSize;
|
||||||
|
if(ui->comboBox_2->currentIndex() == INCH){
|
||||||
|
wSize = QString::number(ui->widget->getPaperSize().width(),'f',2);
|
||||||
|
hSize = QString::number(ui->widget->getPaperSize().height(),'f',2);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wSize = QString::number(int(ui->widget->getPaperSize().width()+0.001));
|
||||||
|
hSize = QString::number(int(ui->widget->getPaperSize().height()+0.001));
|
||||||
|
}
|
||||||
|
ui->sizeLabel->setText("("+wSize + " * " +hSize+")");
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::setSizeInit()
|
||||||
|
{
|
||||||
|
ui->widget->setCutRectStartX(0);
|
||||||
|
ui->widget->setCutRectStartY(0);
|
||||||
|
ui->widget->setCutRectWidth(ui->widget->getPaperSize().width());
|
||||||
|
ui->widget->setCutRectHeight(ui->widget->getPaperSize().height());
|
||||||
|
ui->startXEdt->setText("0");
|
||||||
|
ui->startYEdt->setText("0");
|
||||||
|
ui->rectWidth->setText(QString::number(int(ui->widget->getPaperSize().width())));
|
||||||
|
ui->rectHeight->setText(QString::number(int(ui->widget->getPaperSize().height())));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::setSizeInit(QRectF& rect){
|
||||||
|
setSizeInit();
|
||||||
|
if(rect != QRectF(0,0,0,0))
|
||||||
|
setCutRect(rect);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::cutRectXSlot(double x)
|
||||||
|
{
|
||||||
|
ui->startXEdt->setText(QString::number(x));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::cutRectYSlot(double y)
|
||||||
|
{
|
||||||
|
ui->startYEdt->setText(QString::number(y));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::cutRectWidthSlot(double w)
|
||||||
|
{
|
||||||
|
ui->rectWidth->setText(QString::number(w));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::cutRectHeightSlot(double h)
|
||||||
|
{
|
||||||
|
ui->rectHeight->setText(QString::number(h));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::lineEditEnableSlot(bool b)
|
||||||
|
{
|
||||||
|
ui->startXEdt->setEnabled(b);
|
||||||
|
ui->startYEdt->setEnabled(b);
|
||||||
|
ui->rectWidth->setEnabled(b);
|
||||||
|
ui->rectHeight->setEnabled(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::on_startXEdt_textEdited(QString arg1)
|
||||||
|
{
|
||||||
|
double x = arg1.toDouble();
|
||||||
|
if(x >ui->widget->getCutRectRight()) {
|
||||||
|
//arg1.chop(1);
|
||||||
|
//x = arg1.toDouble();
|
||||||
|
//x = ui->widget->getCutRectRight();
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if(type == PIXEL) x = arg1.toInt();
|
||||||
|
ui->widget->setCutRectStartX(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::on_startYEdt_textEdited(QString arg1)
|
||||||
|
{
|
||||||
|
double y = arg1.toDouble();
|
||||||
|
if(y >ui->widget->getCutRectBottom()) {
|
||||||
|
//arg1.chop(1);
|
||||||
|
//y = arg1.toDouble();
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if(type == PIXEL) y = arg1.toInt();
|
||||||
|
ui->widget->setCutRectStartY(y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::on_rectWidth_textEdited(QString arg1)
|
||||||
|
{
|
||||||
|
double v = arg1.toDouble();
|
||||||
|
if(v > ui->widget->getPaperSize().width() - ui->widget->getCutRectStartPos().x()) {
|
||||||
|
//arg1.chop(1);
|
||||||
|
//v = arg1.toDouble();
|
||||||
|
//v=ui->widget->getPaperSize().width() - ui->widget->getCutRectStartPos().x();
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if(type == PIXEL) v = arg1.toInt();
|
||||||
|
ui->widget->setCutRectWidth(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::on_rectHeight_textEdited(QString arg1)
|
||||||
|
{
|
||||||
|
double v = arg1.toDouble();
|
||||||
|
if(v > ui->widget->getPaperSize().height() - ui->widget->getCutRectStartPos().y()) {
|
||||||
|
//arg1.chop(1);
|
||||||
|
//v = arg1.toDouble();
|
||||||
|
//v = ui->widget->getPaperSize().height() - ui->widget->getCutRectStartPos().y();
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
if(type == PIXEL) v = arg1.toInt();
|
||||||
|
ui->widget->setCutRectHeight(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::on_comboBox_2_currentIndexChanged(int index)
|
||||||
|
{
|
||||||
|
switch(index){
|
||||||
|
case 0:
|
||||||
|
ui->xLabel->setText("mm");
|
||||||
|
ui->yLabel->setText("mm");
|
||||||
|
ui->wLabel->setText("mm");
|
||||||
|
ui->hLabel->setText("mm");
|
||||||
|
ui->widget->setSizeType(MILLIM);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ui->xLabel->setText("in");
|
||||||
|
ui->yLabel->setText("in");
|
||||||
|
ui->wLabel->setText("in");
|
||||||
|
ui->hLabel->setText("in");
|
||||||
|
ui->widget->setSizeType(INCH);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ui->xLabel->setText("px");
|
||||||
|
ui->yLabel->setText("px");
|
||||||
|
ui->wLabel->setText("px");
|
||||||
|
ui->hLabel->setText("px");
|
||||||
|
ui->widget->setSizeType(PIXEL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
setSizeLabel();
|
||||||
|
ui->widget->refreshView();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CutPaperTool::on_buttonBox_accepted()
|
||||||
|
{
|
||||||
|
accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::on_buttonBox_rejected()
|
||||||
|
{
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CutPaperTool::on_pbtn_init_clicked()
|
||||||
|
{
|
||||||
|
setSizeInit();
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
#ifndef CUTPAPERTOOL_H
|
||||||
|
#define CUTPAPERTOOL_H
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include "cutdialog.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class CutPaperTool;
|
||||||
|
}
|
||||||
|
|
||||||
|
class CutPaperTool : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit CutPaperTool(QWidget *parent = nullptr);
|
||||||
|
~CutPaperTool();
|
||||||
|
void setPaperType(const int dpi, const QString& t,const int& w=200);
|
||||||
|
QRectF getCutRectPixel();
|
||||||
|
void setCutRect(QRectF& rect);
|
||||||
|
void setSizeInit();
|
||||||
|
void setSizeInit(QRectF& rect);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
void paintEvent(QPaintEvent *);
|
||||||
|
void setSizeLabel();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void cutRectXSlot(double x);
|
||||||
|
void cutRectYSlot(double y);
|
||||||
|
void cutRectWidthSlot(double w);
|
||||||
|
void cutRectHeightSlot(double h);
|
||||||
|
void lineEditEnableSlot(bool b);
|
||||||
|
|
||||||
|
void on_startXEdt_textEdited(QString arg1);
|
||||||
|
|
||||||
|
void on_startYEdt_textEdited(QString arg1);
|
||||||
|
|
||||||
|
void on_rectWidth_textEdited(QString arg1);
|
||||||
|
|
||||||
|
void on_rectHeight_textEdited(QString arg1);
|
||||||
|
|
||||||
|
void on_comboBox_2_currentIndexChanged(int index);
|
||||||
|
|
||||||
|
void on_buttonBox_accepted();
|
||||||
|
|
||||||
|
void on_buttonBox_rejected();
|
||||||
|
|
||||||
|
void on_pbtn_init_clicked();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::CutPaperTool *ui;
|
||||||
|
SIZETYPE type;
|
||||||
|
int dpi;
|
||||||
|
QString paperType;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CUTPAPERTOOL_H
|
|
@ -0,0 +1,276 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>CutPaperTool</class>
|
||||||
|
<widget class="QWidget" name="CutPaperTool">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>461</width>
|
||||||
|
<height>281</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>自定义扫描区域</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,1,0,0,0">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_6">
|
||||||
|
<property name="text">
|
||||||
|
<string>纸张尺寸:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="paperLab">
|
||||||
|
<property name="text">
|
||||||
|
<string>A4</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="sizeLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>(210*297)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>DPI(像素/英寸):</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignJustify|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="dpiLab">
|
||||||
|
<property name="text">
|
||||||
|
<string>200</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_5">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<property name="text">
|
||||||
|
<string>单位:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="comboBox_2">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>毫米(mm)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>英寸(in)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>像素(px)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pbtn_init">
|
||||||
|
<property name="text">
|
||||||
|
<string>初始化选择区域</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="cutDialog" name="widget" native="true">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>x:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="startXEdt"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="xLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>mm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>y:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="startYEdt"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="yLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>mm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="wLabel_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>w:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="rectWidth"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="wLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>mm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string>h:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="rectHeight"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="hLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>mm</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>cutDialog</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header location="global">cutdialog.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -0,0 +1,54 @@
|
||||||
|
#include "gaosixy.h"
|
||||||
|
#include <QDebug>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
GaoSiXY::GaoSiXY()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void GaoSiXY::solve(double**a,int n,double *recv)
|
||||||
|
{
|
||||||
|
int m = 0;
|
||||||
|
int i,j;
|
||||||
|
|
||||||
|
for(j = 0; j < n; j++){
|
||||||
|
double max = 0;
|
||||||
|
double imax = 0;
|
||||||
|
for(i = j; i < n; i++){
|
||||||
|
if(imax < fabs(a[i][j])){
|
||||||
|
imax = fabs(a[i][j]);
|
||||||
|
max = a[i][j];//得到各行中所在列最大元素
|
||||||
|
m = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(fabs(a[j][j]) != max) {
|
||||||
|
double b = 0;
|
||||||
|
for(int k = j;k < n + 1; k++){
|
||||||
|
b = a[j][k];
|
||||||
|
a[j][k] = a[m][k];
|
||||||
|
a[m][k] = b; }
|
||||||
|
}
|
||||||
|
for(int r = j;r < n + 1;r++){
|
||||||
|
a[j][r] = a[j][r] / max;//让该行的所在列除以所在列的第一个元素,目的是让首元素为1
|
||||||
|
}
|
||||||
|
for(i = j + 1;i < n; i++){
|
||||||
|
double c = a[i][j];
|
||||||
|
if(c == 0) continue;
|
||||||
|
for(int s = j;s < n + 1;s++){
|
||||||
|
//double tempdata = a[i][s];
|
||||||
|
a[i][s] = a[i][s] - a[j][s] * c;//前后行数相减,使下一行或者上一行的首元素为0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i = n - 2; i >= 0; i--){
|
||||||
|
for(j = i + 1;j < n; j++){
|
||||||
|
a[i][n] = a[i][n] - a[j][n] * a[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int k = 0; k < n; k++){
|
||||||
|
recv[k] = a[k][n];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
#ifndef GAOSIXY_H
|
||||||
|
#define GAOSIXY_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
class GaoSiXY
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GaoSiXY();
|
||||||
|
void solve(double **a,int n,double *recv);//用于计算曲线方程
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GAOSIXY_H
|
|
@ -862,6 +862,8 @@ void MainWindow::on_scan_working(QString workingInfo)
|
||||||
|
|
||||||
void MainWindow::on_scan_finish(QString finishInfo, int err)
|
void MainWindow::on_scan_finish(QString finishInfo, int err)
|
||||||
{
|
{
|
||||||
|
if (0 == m_scanType)
|
||||||
|
{
|
||||||
if (nullptr != m_scanImgFmtWriter)
|
if (nullptr != m_scanImgFmtWriter)
|
||||||
{
|
{
|
||||||
HGImgFmt_CloseImageWriter(m_scanImgFmtWriter);
|
HGImgFmt_CloseImageWriter(m_scanImgFmtWriter);
|
||||||
|
@ -870,6 +872,7 @@ void MainWindow::on_scan_finish(QString finishInfo, int err)
|
||||||
m_scanFileName.clear();
|
m_scanFileName.clear();
|
||||||
++m_aquireIntoSaveParam.m_fileNameStartIndex;
|
++m_aquireIntoSaveParam.m_fileNameStartIndex;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_isScanning = false;
|
m_isScanning = false;
|
||||||
m_thumb->setAcceptDrops(true);
|
m_thumb->setAcceptDrops(true);
|
||||||
|
@ -919,12 +922,27 @@ void MainWindow::on_continueScan()
|
||||||
|
|
||||||
void MainWindow::on_stopScan()
|
void MainWindow::on_stopScan()
|
||||||
{
|
{
|
||||||
if (!cur_dev_.is_online() || !m_isScanning)
|
m_scanType = 0;
|
||||||
{
|
m_dialogLog->updateStatus(cur_dev_.is_online() && 0 != m_scanType, m_isScanning);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!m_isScanning)
|
||||||
|
{
|
||||||
|
if (nullptr != m_scanImgFmtWriter)
|
||||||
|
{
|
||||||
|
HGImgFmt_CloseImageWriter(m_scanImgFmtWriter);
|
||||||
|
m_scanImgFmtWriter = nullptr;
|
||||||
|
m_thumb->addItem(m_scanFileName);
|
||||||
|
m_scanFileName.clear();
|
||||||
|
++m_aquireIntoSaveParam.m_fileNameStartIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (cur_dev_.is_online())
|
||||||
|
{
|
||||||
sane_cancel(cur_dev_.handle());
|
sane_cancel(cur_dev_.handle());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_statusInfoDblClick()
|
void MainWindow::on_statusInfoDblClick()
|
||||||
|
|
|
@ -0,0 +1,313 @@
|
||||||
|
#include "setpicclrtool.h"
|
||||||
|
#include "ui_setpicclrtool.h"
|
||||||
|
#include "widget.h"
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QVariant>
|
||||||
|
|
||||||
|
setPicClrTool::setPicClrTool(QWidget *parent) :
|
||||||
|
QDialog(parent),
|
||||||
|
ui(new Ui::setPicClrTool)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
setMouseTracking(true);
|
||||||
|
ui->inputEdt->setEnabled(false);
|
||||||
|
ui->outputEdt->setEnabled(false);
|
||||||
|
ui->inputEdt->setValidator(new QIntValidator(0, 255, this));
|
||||||
|
ui->outputEdt->setValidator(new QIntValidator(0, 255, this));
|
||||||
|
ui->widget->setFocus(Qt::MouseFocusReason);
|
||||||
|
connect(ui->widget,SIGNAL(mouseCoordSig(QPoint)),this,SLOT(mouseCoordSlot(QPoint)));
|
||||||
|
connect(ui->widget,SIGNAL(dragPointChecked(bool)),this,SLOT(lineEditEnable(bool)));
|
||||||
|
connect(ui->widget,SIGNAL(lineChangeSig()),this,SLOT(lineChangeSlot()));
|
||||||
|
}
|
||||||
|
|
||||||
|
setPicClrTool::~setPicClrTool()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::getGrayTable(uchar *table, size_t length)
|
||||||
|
{
|
||||||
|
QVector<int> gray = getGrayALLPoint();
|
||||||
|
for (size_t i = 0; i < length; i++)
|
||||||
|
table[i] = static_cast<uchar>(gray[static_cast<int>(i)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::getRGBTable(uchar *table, size_t length)
|
||||||
|
{
|
||||||
|
if (length != 768)
|
||||||
|
throw "length is not 768.";
|
||||||
|
|
||||||
|
QVector<int> rgb = getRgbALLPoint();
|
||||||
|
QVector<int> red = getRedALLPoint();
|
||||||
|
QVector<int> green = getGreenALLPoint();
|
||||||
|
QVector<int> blue = getBlueALLPoint();
|
||||||
|
|
||||||
|
|
||||||
|
for (size_t i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
//if (i == 255)
|
||||||
|
// int a = 0;
|
||||||
|
//table member order is B\G\R
|
||||||
|
table[i * 3 + 0] = static_cast<uchar>(blue[rgb[static_cast<int>(i)]]);
|
||||||
|
table[i * 3 + 1] = static_cast<uchar>(green[rgb[static_cast<int>(i)]]);
|
||||||
|
table[i * 3 + 2] = static_cast<uchar>(red[rgb[static_cast<int>(i)]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//void setPicClrTool::setGrayTable(const uchar *table, size_t length)
|
||||||
|
//{
|
||||||
|
// QVector<int> gray;
|
||||||
|
// for (size_t i = 0; i < length; i++)
|
||||||
|
// gray[static_cast<int>(i)] = int(table[i]);
|
||||||
|
// //ui->widget->setGrayALLPoint(gray);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//void setPicClrTool::setRGBTable(const uchar *table, size_t length)
|
||||||
|
//{
|
||||||
|
// QVector<int> rgb;
|
||||||
|
// QVector<int> red;
|
||||||
|
// QVector<int> green;
|
||||||
|
// QVector<int> blue;
|
||||||
|
// for(int i = 0; i < 256; i++){
|
||||||
|
// rgb.append(i);
|
||||||
|
// }
|
||||||
|
// for (size_t i = 0; i < length; i++){
|
||||||
|
// red.append(int(table[i * 3 + 0]));
|
||||||
|
// green.append(int(table[i * 3 + 1]));
|
||||||
|
// blue.append(int(table[i * 3 + 2]));
|
||||||
|
// }
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
|
void setPicClrTool::setColorMode(int colorMode)
|
||||||
|
{
|
||||||
|
QVariant v(6);
|
||||||
|
if(colorMode == 0)
|
||||||
|
{
|
||||||
|
ui->colorSetCmb->setItemData(1,v,Qt::UserRole - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->comboBox->setItemData(2,v,Qt::UserRole - 1);
|
||||||
|
ui->colorSetCmb->setItemData(0,v,Qt::UserRole - 1);
|
||||||
|
ui->colorSetCmb->setItemData(2,v,Qt::UserRole - 1);
|
||||||
|
ui->colorSetCmb->setItemData(3,v,Qt::UserRole - 1);
|
||||||
|
ui->colorSetCmb->setItemData(4,v,Qt::UserRole - 1);
|
||||||
|
ui->colorSetCmb->setCurrentIndex(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<QList<QPoint> > setPicClrTool::getRGBKeyTable()
|
||||||
|
{
|
||||||
|
QVector<QList<QPoint>> plv;
|
||||||
|
plv.append(getRgbKeyPoint());
|
||||||
|
plv.append(getRedKeyPoint());
|
||||||
|
plv.append(getGreenKeyPoint());
|
||||||
|
plv.append(getBlueKeyPoint());
|
||||||
|
return plv;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::setRGBKeyTable(QVector<QList<QPoint> > &plv)
|
||||||
|
{
|
||||||
|
setRgbKeyPoint(plv[0]);
|
||||||
|
setRedKeyPoint(plv[1]);
|
||||||
|
setGreenKeyPoint(plv[2]);
|
||||||
|
setBlueKeyPoint(plv[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> setPicClrTool::getGrayKeyTable()
|
||||||
|
{
|
||||||
|
return getGrayKeyPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::setGrayKeyTable(QList<QPoint> &plv)
|
||||||
|
{
|
||||||
|
setGrayKeyPoint(plv);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> setPicClrTool::getRgbALLPoint()
|
||||||
|
{
|
||||||
|
return ui->widget->getRgbALLPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> setPicClrTool::getRgbKeyPoint() const
|
||||||
|
{
|
||||||
|
qDebug() << "setRgb" << ui->widget->getRgbKeyPoint();
|
||||||
|
return ui->widget->getRgbKeyPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::setRgbKeyPoint(const QList<QPoint> &pVec)
|
||||||
|
{
|
||||||
|
qDebug() << "setRgb" << pVec;
|
||||||
|
ui->widget->setRgbKeyPoint(pVec);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> setPicClrTool::getRedKeyPoint() const
|
||||||
|
{
|
||||||
|
return ui->widget->getRedKeyPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::setRedKeyPoint(const QList<QPoint> &pVec)
|
||||||
|
{
|
||||||
|
ui->widget->setRedKeyPoint(pVec);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> setPicClrTool::getBlueKeyPoint() const
|
||||||
|
{
|
||||||
|
return ui->widget->getBlueKeyPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::setBlueKeyPoint(const QList<QPoint> &pVec)
|
||||||
|
{
|
||||||
|
ui->widget->setBlueKeyPoint(pVec);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> setPicClrTool::getGreenKeyPoint() const
|
||||||
|
{
|
||||||
|
return ui->widget->getGreenKeyPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::setGreenKeyPoint(const QList<QPoint> &pVec)
|
||||||
|
{
|
||||||
|
ui->widget->setGreenKeyPoint(pVec);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> setPicClrTool::getGrayKeyPoint() const
|
||||||
|
{
|
||||||
|
return ui->widget->getGrayKeyPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::setGrayKeyPoint(const QList<QPoint> &pVec)
|
||||||
|
{
|
||||||
|
ui->widget->setGrayKeyPoint(pVec);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> setPicClrTool::getRedALLPoint()
|
||||||
|
{
|
||||||
|
return ui->widget->getRedALLPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> setPicClrTool::getBlueALLPoint()
|
||||||
|
{
|
||||||
|
return ui->widget->getBlueALLPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> setPicClrTool::getGreenALLPoint()
|
||||||
|
{
|
||||||
|
return ui->widget->getGreenALLPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> setPicClrTool::getGrayALLPoint()
|
||||||
|
{
|
||||||
|
return ui->widget->getGrayALLPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::mouseCoordSlot(QPoint pos)
|
||||||
|
{
|
||||||
|
ui->inputEdt->setText(QString::number(pos.x()));
|
||||||
|
ui->outputEdt->setText(QString::number(pos.y()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::lineEditEnable(bool a)
|
||||||
|
{
|
||||||
|
ui->inputEdt->setEnabled(a);
|
||||||
|
ui->outputEdt->setEnabled(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::lineChangeSlot()
|
||||||
|
{
|
||||||
|
ui->comboBox->setCurrentIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::on_colorSetCmb_currentIndexChanged(int index)
|
||||||
|
{
|
||||||
|
(void)index;
|
||||||
|
/* switch(index){
|
||||||
|
case RED:
|
||||||
|
ui->widget->updateCurLinePnt(RED);
|
||||||
|
break;
|
||||||
|
case GREEN:
|
||||||
|
ui->widget->updateCurLinePnt(GREEN);
|
||||||
|
break;
|
||||||
|
case BLUE:
|
||||||
|
ui->widget->updateCurLinePnt(BLUE);
|
||||||
|
break;
|
||||||
|
case RGB:
|
||||||
|
ui->widget->updateCurLinePnt(RGB);
|
||||||
|
break;
|
||||||
|
case GRAY:
|
||||||
|
ui->widget->updateCurLinePnt(GRAY);
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::on_comboBox_currentIndexChanged(int index)
|
||||||
|
{
|
||||||
|
if(index == 0){
|
||||||
|
ui->widget->initAllLstPnt();
|
||||||
|
ui->widget->updateCurLinePnt(ui->colorSetCmb->currentIndex());
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
ui->widget->initAllLstPnt();
|
||||||
|
if(index == 1){
|
||||||
|
rgbLine.clear();
|
||||||
|
rgbLine.append(QPoint(0,255));
|
||||||
|
rgbLine.append(QPoint(255,0));
|
||||||
|
ui->widget->setLstPnt_RGB(rgbLine);
|
||||||
|
}else if(index == 2){
|
||||||
|
redLine.clear();
|
||||||
|
redLine.append(QPoint(33,255));
|
||||||
|
redLine.append(QPoint(185,0));
|
||||||
|
redLine.append(QPoint(119,127));
|
||||||
|
greenLine.clear();
|
||||||
|
greenLine.append(QPoint(28,255));
|
||||||
|
greenLine.append(QPoint(132,0));
|
||||||
|
greenLine.append(QPoint(77,127));
|
||||||
|
blueLine.clear();
|
||||||
|
blueLine.append(QPoint(25,255));
|
||||||
|
blueLine.append(QPoint(108,0));
|
||||||
|
blueLine.append(QPoint(60,127));
|
||||||
|
ui->widget->setLstPnt_RED(redLine);
|
||||||
|
ui->widget->setLstPnt_GREEN(greenLine);
|
||||||
|
ui->widget->setLstPnt_BLUE(blueLine);
|
||||||
|
}else if(index == 4){
|
||||||
|
rgbLine.clear();
|
||||||
|
rgbLine.append(QPoint(0,0));
|
||||||
|
rgbLine.append(QPoint(255,255));
|
||||||
|
rgbLine.append(QPoint(103,125));
|
||||||
|
ui->widget->setLstPnt_RGB(rgbLine);
|
||||||
|
}else if(index == 3){
|
||||||
|
rgbLine.clear();
|
||||||
|
rgbLine.append(QPoint(0,0));
|
||||||
|
rgbLine.append(QPoint(255,255));
|
||||||
|
rgbLine.append(QPoint(130,101));
|
||||||
|
ui->widget->setLstPnt_RGB(rgbLine);
|
||||||
|
}
|
||||||
|
ui->widget->updateCurLinePnt(ui->colorSetCmb->currentIndex());
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::on_inputEdt_textChanged(const QString &arg1)
|
||||||
|
{
|
||||||
|
ui->widget->setXCoorVal(arg1.toInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::on_outputEdt_textChanged(const QString &arg1)
|
||||||
|
{
|
||||||
|
ui->widget->setYCoorVal(arg1.toInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::on_pushButton_clicked()
|
||||||
|
{
|
||||||
|
ui->widget->initSelectColLine(ui->colorSetCmb->currentIndex());
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::on_buttonBox_accepted()
|
||||||
|
{
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setPicClrTool::on_buttonBox_rejected()
|
||||||
|
{
|
||||||
|
ui->widget->initAllLstPnt();
|
||||||
|
close();
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
#ifndef SETPICCLRTOOL_H
|
||||||
|
#define SETPICCLRTOOL_H
|
||||||
|
|
||||||
|
//#include "colorlinesetdef.h"
|
||||||
|
#include <QDialog>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class setPicClrTool;
|
||||||
|
}
|
||||||
|
|
||||||
|
class setPicClrTool : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit setPicClrTool(QWidget *parent = nullptr);
|
||||||
|
~setPicClrTool();
|
||||||
|
|
||||||
|
void getGrayTable(uchar* table, size_t length = 256);
|
||||||
|
|
||||||
|
void getRGBTable(uchar* table, size_t length = 768);
|
||||||
|
|
||||||
|
// void setGrayTable(const uchar* table, size_t length = 256);
|
||||||
|
|
||||||
|
// void setRGBTable(const uchar* table, size_t length = 768);
|
||||||
|
|
||||||
|
void setColorMode(int colorMode);
|
||||||
|
|
||||||
|
QVector<QList<QPoint>> getRGBKeyTable();
|
||||||
|
void setRGBKeyTable(QVector<QList<QPoint>>& plv);
|
||||||
|
QList<QPoint> getGrayKeyTable();
|
||||||
|
void setGrayKeyTable(QList<QPoint> &plv);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
QVector<int> getRgbALLPoint();
|
||||||
|
QVector<int> getRedALLPoint();
|
||||||
|
QVector<int> getBlueALLPoint();
|
||||||
|
QVector<int> getGreenALLPoint();
|
||||||
|
QVector<int> getGrayALLPoint();
|
||||||
|
|
||||||
|
QList<QPoint> getRgbKeyPoint()const;
|
||||||
|
void setRgbKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
QList<QPoint> getRedKeyPoint()const;
|
||||||
|
void setRedKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
QList<QPoint> getBlueKeyPoint()const;
|
||||||
|
void setBlueKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
QList<QPoint> getGreenKeyPoint()const;
|
||||||
|
void setGreenKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
QList<QPoint> getGrayKeyPoint()const;
|
||||||
|
void setGrayKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void mouseCoordSlot(QPoint);//set QLineEdit value by QPoint setting
|
||||||
|
void lineEditEnable(bool);//set 2 LineEdit enable status
|
||||||
|
void lineChangeSlot();
|
||||||
|
|
||||||
|
void on_colorSetCmb_currentIndexChanged(int index);
|
||||||
|
|
||||||
|
void on_comboBox_currentIndexChanged(int index);
|
||||||
|
|
||||||
|
void on_inputEdt_textChanged(const QString &arg1);
|
||||||
|
|
||||||
|
void on_outputEdt_textChanged(const QString &arg1);
|
||||||
|
|
||||||
|
void on_pushButton_clicked();
|
||||||
|
|
||||||
|
void on_buttonBox_accepted();
|
||||||
|
|
||||||
|
void on_buttonBox_rejected();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::setPicClrTool *ui;
|
||||||
|
QList<QPoint> linePoint;
|
||||||
|
QList<QPoint> greenLine;
|
||||||
|
QList<QPoint> redLine;
|
||||||
|
QList<QPoint> blueLine;
|
||||||
|
QList<QPoint> rgbLine;
|
||||||
|
QList<QPoint> grayLine;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // SETPICCLRTOOL_H
|
|
@ -0,0 +1,167 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>setPicClrTool</class>
|
||||||
|
<widget class="QWidget" name="setPicClrTool">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>259</width>
|
||||||
|
<height>341</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>自定义色调曲线</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,1,0,0">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="comboBox">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>自定</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>负片(RGB)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>彩色负片(RGB)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>较暗(RGB)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>较亮(RGB)</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="4,2,1">
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="colorSetCmb">
|
||||||
|
<property name="mouseTracking">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>RGB</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>灰</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>红</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>蓝</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>绿</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>初始化</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Widget" name="widget" native="true">
|
||||||
|
<property name="mouseTracking">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::StrongFocus</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>输入:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="inputEdt">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>输出:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="outputEdt">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>Widget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header location="global">widget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -0,0 +1,855 @@
|
||||||
|
#include "widget.h"
|
||||||
|
#include "ui_widget.h"
|
||||||
|
#include "gaosixy.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QVector>
|
||||||
|
#include <QDebug>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
enum COLOR_TPYE
|
||||||
|
{
|
||||||
|
RGB,
|
||||||
|
GRAY,
|
||||||
|
RED,
|
||||||
|
BLUE,
|
||||||
|
GREEN
|
||||||
|
};
|
||||||
|
|
||||||
|
Widget::Widget(QWidget *parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
ui(new Ui::Widget)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
setWindowTitle(tr("zuobiaozhou")); //设置标题栏标题
|
||||||
|
//resize(300,300); //设置窗口初始大小
|
||||||
|
//ui->table->setWindowFlags(Qt::WindowStaysOnTopHint);
|
||||||
|
initAllLstPnt();
|
||||||
|
initInterface();
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget::~Widget()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setLstPnt_RGB(const QList<QPoint> &plst)
|
||||||
|
{
|
||||||
|
rgbLine = QList<QPoint>(plst);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getLstPnt_RGB() const
|
||||||
|
{
|
||||||
|
return rgbLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setLstPnt_RED(const QList<QPoint> &plst)
|
||||||
|
{
|
||||||
|
redLine = QList<QPoint>(plst);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setLstPnt_BLUE(const QList<QPoint> &plst)
|
||||||
|
{
|
||||||
|
blueLine = QList<QPoint>(plst);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getLstPnt_BLUE() const
|
||||||
|
{
|
||||||
|
return blueLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setLstPnt_GREEN(const QList<QPoint> &plst)
|
||||||
|
{
|
||||||
|
greenLine = QList<QPoint>(plst);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getLstPnt_GREEN() const
|
||||||
|
{
|
||||||
|
return greenLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setLstPnt_GRAY(const QList<QPoint> &plst)
|
||||||
|
{
|
||||||
|
grayLine = QList<QPoint>(plst);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getLstPnt_GRAY() const
|
||||||
|
{
|
||||||
|
return grayLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getRgbALLPoint()
|
||||||
|
{
|
||||||
|
return rgbALLPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getRgbKeyPoint() const
|
||||||
|
{
|
||||||
|
return rgbLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setRgbKeyPoint(const QList<QPoint> &pLst)
|
||||||
|
{
|
||||||
|
if(pLst.size() > 4) return;
|
||||||
|
rgbLine = QList<QPoint>(pLst);
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst = QList<QPoint>(rgbLine);
|
||||||
|
drawLineFromPoint(rgbLine, RGB);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getRedALLPoint()
|
||||||
|
{
|
||||||
|
return redALLPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getRedKeyPoint() const
|
||||||
|
{
|
||||||
|
return redLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setRedKeyPoint(const QList<QPoint> &pLst)
|
||||||
|
{
|
||||||
|
if(pLst.size() > 4) return;
|
||||||
|
redLine = QList<QPoint>(pLst);
|
||||||
|
drawLineFromPoint(redLine, RED);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getBlueALLPoint()
|
||||||
|
{
|
||||||
|
return blueALLPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getBlueKeyPoint() const
|
||||||
|
{
|
||||||
|
return blueLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setBlueKeyPoint(const QList<QPoint> &pLst)
|
||||||
|
{
|
||||||
|
if(pLst.size() > 4) return;
|
||||||
|
blueLine = QList<QPoint>(pLst);
|
||||||
|
drawLineFromPoint(blueLine, BLUE);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getGreenALLPoint()
|
||||||
|
{
|
||||||
|
return greenALLPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getGreenKeyPoint() const
|
||||||
|
{
|
||||||
|
return greenLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setGreenKeyPoint(const QList<QPoint> &pLst)
|
||||||
|
{
|
||||||
|
if(pLst.size() > 4) return;
|
||||||
|
greenLine = QList<QPoint>(pLst);
|
||||||
|
drawLineFromPoint(greenLine, GREEN);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getGrayALLPoint()
|
||||||
|
{
|
||||||
|
return grayALLPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QPoint> Widget::getGrayKeyPoint() const
|
||||||
|
{
|
||||||
|
return grayLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setGrayKeyPoint(const QList<QPoint> &pLst)
|
||||||
|
{
|
||||||
|
if(pLst.size() > 4) return;
|
||||||
|
grayLine = QList<QPoint>(pLst);
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst = QList<QPoint>(grayLine);
|
||||||
|
drawLineFromPoint(grayLine, GRAY);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::initAllLstPnt()
|
||||||
|
{
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst.append(QPoint(0,0));
|
||||||
|
pointLst.append(QPoint(255,255));
|
||||||
|
redLine.clear();
|
||||||
|
redLine.append(QPoint(0,0));
|
||||||
|
redLine.append(QPoint(255,255));
|
||||||
|
blueLine.clear();
|
||||||
|
blueLine.append(QPoint(0,0));
|
||||||
|
blueLine.append(QPoint(255,255));
|
||||||
|
greenLine.clear();
|
||||||
|
greenLine.append(QPoint(0,0));
|
||||||
|
greenLine.append(QPoint(255,255));
|
||||||
|
rgbLine.clear();
|
||||||
|
rgbLine.append(QPoint(0,0));
|
||||||
|
rgbLine.append(QPoint(255,255));
|
||||||
|
grayLine.clear();
|
||||||
|
grayLine.append(QPoint(0,0));
|
||||||
|
grayLine.append(QPoint(255,255));
|
||||||
|
drawLineFromPoint(redLine, RED);
|
||||||
|
drawLineFromPoint(rgbLine, RGB);
|
||||||
|
drawLineFromPoint(greenLine, GREEN);
|
||||||
|
drawLineFromPoint(blueLine, BLUE);
|
||||||
|
drawLineFromPoint(grayLine, GRAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::initInterface()
|
||||||
|
{
|
||||||
|
color = Qt::gray;
|
||||||
|
selectCol = RGB;
|
||||||
|
leftMouseMv = false;
|
||||||
|
newPoint = false;
|
||||||
|
clickLine = false;
|
||||||
|
dragPoint = -1;
|
||||||
|
setMouseTracking(true);
|
||||||
|
ui->widget_2->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:0, x2:1, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))}");
|
||||||
|
ui->widget->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:1, x2:0, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))}");
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::paintEvent(QPaintEvent *)
|
||||||
|
{
|
||||||
|
QPainter painter(this);
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing,true); //开启抗锯齿
|
||||||
|
painter.translate(ui->widget->width(),ui->widget->height()); //坐标系统平移变换,把原点平移
|
||||||
|
painter.scale(ui->table->width() / 258.0,ui->table->height() / 258.0); //坐标系统比例变换,使绘制的图形随窗口的放大而放大
|
||||||
|
painter.scale(1,-1);
|
||||||
|
|
||||||
|
drawCoordinate(painter);
|
||||||
|
drawBackColorBySlc(painter);
|
||||||
|
drawCoorScale(painter);
|
||||||
|
drawCurveByColor(painter);
|
||||||
|
drawAllPoint(painter);
|
||||||
|
|
||||||
|
if(dragPoint < 0){
|
||||||
|
setMouseTracking(true);
|
||||||
|
emit dragPointChecked(false);
|
||||||
|
}
|
||||||
|
painter.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::mousePressEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
int x = (event->x() - ui->widget->width())*258/ui->table->width();
|
||||||
|
int y = (height() - event->y()-ui->widget_2->height())*258/ui->table->height();
|
||||||
|
//qDebug() << x << y;
|
||||||
|
if(event->button() == Qt::LeftButton){
|
||||||
|
newPoint = false;
|
||||||
|
dragPoint = -1;
|
||||||
|
clickLine = false;
|
||||||
|
for(int i = 0; i < linePoint.size();i++){
|
||||||
|
int px = linePoint.at(i).x();
|
||||||
|
int py = linePoint.at(i).y();
|
||||||
|
if(qAbs(x-px) <= 6 && qAbs(y-py) <= 6)
|
||||||
|
{
|
||||||
|
newPoint = true;
|
||||||
|
for(int j = 0; j < pointLst.size(); j++){
|
||||||
|
int lx = pointLst.at(j).x();
|
||||||
|
int ly = pointLst.at(j).y();
|
||||||
|
if(qAbs(x-lx) <= 6 && qAbs(y-ly) <= 6){
|
||||||
|
dragPoint = j;
|
||||||
|
clickLine = true;
|
||||||
|
leftMouseMv = true;
|
||||||
|
newPoint = false;
|
||||||
|
emit dragPointChecked(true);
|
||||||
|
setMouseTracking(false);
|
||||||
|
update();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(newPoint && pointLst.size() < 4 && x > pointLst.at(0).x() && x < pointLst.at(1).x()){
|
||||||
|
pointLst.append(QPoint(x,y));
|
||||||
|
dragPoint = pointLst.size()-1;
|
||||||
|
leftMouseMv = true;
|
||||||
|
clickLine = true;
|
||||||
|
emit dragPointChecked(true);
|
||||||
|
setMouseTracking(false);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(event->button() == Qt::RightButton){
|
||||||
|
for(int j = 0; j < pointLst.size(); j++){
|
||||||
|
int lx = pointLst.at(j).x();
|
||||||
|
int ly = pointLst.at(j).y();
|
||||||
|
if(qAbs(x-lx) <= 7 && qAbs(y-ly) <= 5){
|
||||||
|
if(j > 1)
|
||||||
|
pointLst.removeAt(j);
|
||||||
|
if(j == dragPoint){
|
||||||
|
dragPoint = -1;
|
||||||
|
emit dragPointChecked(false);
|
||||||
|
}else if(j > dragPoint){
|
||||||
|
dragPoint = dragPoint;
|
||||||
|
}else {
|
||||||
|
dragPoint = dragPoint-1;
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!clickLine){
|
||||||
|
dragPoint = -1;
|
||||||
|
emit dragPointChecked(false);
|
||||||
|
setMouseTracking(true);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
emit mouseCoordSig(QPoint(x,y));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::mouseMoveEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
int x = (event->x() - ui->widget->width())*258/ui->table->width();
|
||||||
|
int y = (height() - event->y()-ui->widget_2->height())*258/ui->table->height();
|
||||||
|
if(x < 0) x = 0;
|
||||||
|
if(y < 0) y = 0;
|
||||||
|
if(x >= 255) x = 255;
|
||||||
|
if(y >= 255) y = 255;
|
||||||
|
//qDebug() << x << y;
|
||||||
|
if(leftMouseMv && dragPoint >= 0)
|
||||||
|
{
|
||||||
|
if(pointLst[dragPoint] != pointLst.at(0) && pointLst[dragPoint] != pointLst.at(1)){
|
||||||
|
if(x <= pointLst.at(0).x()) x = pointLst.at(0).x() + 1;
|
||||||
|
if(x >= pointLst.at(1).x()) x = pointLst.at(1).x() - 1;
|
||||||
|
|
||||||
|
if(pointLst.size() == 4){
|
||||||
|
if(dragPoint == 2){
|
||||||
|
if(pointLst[2].x() > pointLst[3].x() && x <= pointLst[3].x())
|
||||||
|
x = pointLst[3].x() + 1;
|
||||||
|
if(pointLst[2].x() < pointLst[3].x() && x >= pointLst[3].x())
|
||||||
|
x = pointLst[3].x() - 1;
|
||||||
|
}
|
||||||
|
else if(dragPoint == 3){
|
||||||
|
if(pointLst[2].x() < pointLst[3].x() && x <= pointLst[2].x())
|
||||||
|
x = pointLst[2].x() + 1;
|
||||||
|
if(pointLst[2].x() > pointLst[3].x() && x >= pointLst[2].x())
|
||||||
|
x = pointLst[2].x() - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(pointLst[dragPoint] == pointLst.at(0)){
|
||||||
|
int min = 999;
|
||||||
|
for(int i = 1; i < pointLst.size(); i++){
|
||||||
|
if(min > pointLst[i].x()) min = pointLst[i].x();
|
||||||
|
}
|
||||||
|
if(x >= min) x = min-1;
|
||||||
|
}
|
||||||
|
else if(pointLst[dragPoint] == pointLst.at(1)){
|
||||||
|
if(pointLst.size() > 2){
|
||||||
|
int max = 0;
|
||||||
|
for(int i = 2; i < pointLst.size(); i++){
|
||||||
|
if(max < pointLst[i].x()) max = pointLst[i].x();
|
||||||
|
}
|
||||||
|
if(x <= max) x = max+1;
|
||||||
|
}
|
||||||
|
else if(pointLst.size() <= 2)
|
||||||
|
if(x <= pointLst.at(0).x()) x = pointLst.at(0).x()+1;
|
||||||
|
}
|
||||||
|
pointLst[dragPoint].setX(x);
|
||||||
|
pointLst[dragPoint].setY(y);
|
||||||
|
emit lineChangeSig();
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
emit mouseCoordSig(QPoint(x,y));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::mouseReleaseEvent(QMouseEvent *)
|
||||||
|
{
|
||||||
|
leftMouseMv = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::enterEvent(QEvent *)
|
||||||
|
{
|
||||||
|
setFocus(Qt::MouseFocusReason);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::leaveEvent(QEvent *)
|
||||||
|
{
|
||||||
|
if(dragPoint < 0)
|
||||||
|
emit mouseLeaveSig();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setHist_RGB(const QVector<int> &hist)
|
||||||
|
{
|
||||||
|
rgbBackColor = QVector<int>(hist);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getHist_RED() const
|
||||||
|
{
|
||||||
|
return redBackColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setHist_RED(const QVector<int> &hist)
|
||||||
|
{
|
||||||
|
redBackColor = QVector<int>(hist);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getHist_RGB() const
|
||||||
|
{
|
||||||
|
return rgbBackColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setHist_GREEN(const QVector<int> &hist)
|
||||||
|
{
|
||||||
|
greenBackColor = QVector<int>(hist);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getHist_GREEN() const
|
||||||
|
{
|
||||||
|
return greenBackColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setHist_BLUE(const QVector<int> &hist)
|
||||||
|
{
|
||||||
|
blueBackColor = QVector<int>(hist);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getHist_BLUE() const
|
||||||
|
{
|
||||||
|
return blueBackColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setHist_GRAY(const QVector<int> &hist)
|
||||||
|
{
|
||||||
|
grayBackColor = QVector<int>(hist);
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<int> Widget::getHist_GRAY() const
|
||||||
|
{
|
||||||
|
return grayBackColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::drawCoordinate(QPainter &painter)
|
||||||
|
{
|
||||||
|
painter.setBrush(QColor(79,79,79));
|
||||||
|
painter.drawRect(0, 0, 260, 260);
|
||||||
|
painter.drawLine(-2000,0,2000,0);
|
||||||
|
painter.drawLine(0,1500,0,-1500);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::drawBackgroudColor(QPainter &painter,QVector<int> &curCol)
|
||||||
|
{
|
||||||
|
painter.setPen(QPen(color,1));
|
||||||
|
painter.setBrush(color);
|
||||||
|
int max = 0;
|
||||||
|
for(int i = 0; i < curCol.size(); i++)
|
||||||
|
{
|
||||||
|
if(curCol.at(i) > max)
|
||||||
|
{
|
||||||
|
max = curCol.at(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int i = 0; i < curCol.size(); i++)
|
||||||
|
{
|
||||||
|
painter.drawRect(i, 0, 1, curCol.at(i)*255/max);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::drawBackColorBySlc(QPainter &painter)
|
||||||
|
{
|
||||||
|
switch(selectCol){
|
||||||
|
case RGB:
|
||||||
|
drawBackgroudColor(painter,rgbBackColor);
|
||||||
|
break;
|
||||||
|
case GREEN:
|
||||||
|
drawBackgroudColor(painter,greenBackColor);
|
||||||
|
break;
|
||||||
|
case BLUE:
|
||||||
|
drawBackgroudColor(painter,blueBackColor);
|
||||||
|
break;
|
||||||
|
case RED:
|
||||||
|
drawBackgroudColor(painter,redBackColor);
|
||||||
|
break;
|
||||||
|
case GRAY:
|
||||||
|
drawBackgroudColor(painter,grayBackColor);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::drawCoorScale(QPainter &painter)
|
||||||
|
{
|
||||||
|
painter.setPen(QPen(Qt::gray,1));
|
||||||
|
for(int i = 0; i < 260 ; i+=50)
|
||||||
|
{
|
||||||
|
if(i%50 == 0 && i >=50)
|
||||||
|
{
|
||||||
|
QVector<qreal> dashes;
|
||||||
|
qreal space = 3;
|
||||||
|
dashes << 5 << space << 5 <<space;
|
||||||
|
QPen pen;
|
||||||
|
pen.setDashPattern(dashes);
|
||||||
|
pen.setWidth(1);
|
||||||
|
painter.setPen(pen);
|
||||||
|
painter.drawLine(i,300,i,0);
|
||||||
|
painter.drawLine(0,i,300,i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QLine line(0,0,255,255);
|
||||||
|
painter.drawLine(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::drawLineFromPoint(QList<QPoint> &plst, const int& col)
|
||||||
|
{
|
||||||
|
double **a;
|
||||||
|
int len = plst.size();
|
||||||
|
a = new double *[len];
|
||||||
|
for(int i = 0; i < len; i++){
|
||||||
|
a[i] = new double[len+1];
|
||||||
|
}
|
||||||
|
/*******通过pointLst的所有点给二维数组赋值生成行列式*******/
|
||||||
|
for(int i = 0; i < len; i++){
|
||||||
|
for(int j = 0;j < len + 1; j++){
|
||||||
|
if(j < len)
|
||||||
|
a[i][j] = caculateAllMi(plst.at(i).x(),len-j-1);
|
||||||
|
if(j == len)
|
||||||
|
a[i][j] = plst.at(i).y();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******调用高斯消元法计算曲线方程的系数值********/
|
||||||
|
GaoSiXY gaoSi;
|
||||||
|
double *result = new double[len] ;
|
||||||
|
gaoSi.solve(a,len,result);
|
||||||
|
|
||||||
|
/********保存曲线方程 x 的系数(a,b,c,d....)********/
|
||||||
|
QList<double> xiNum;
|
||||||
|
for(int i = 0; i < len; i++){
|
||||||
|
xiNum.append(*(result+i));
|
||||||
|
}
|
||||||
|
|
||||||
|
linePoint.clear();
|
||||||
|
linePoints.clear();
|
||||||
|
for(int i = 0; i < 256; i++){
|
||||||
|
int x = i;
|
||||||
|
double yVal = 0;
|
||||||
|
for(int j = 0; j < len; j++){
|
||||||
|
yVal += xiNum.at(j)*caculateAllMi(x,len-j-1);
|
||||||
|
}
|
||||||
|
int y = (int)yVal;
|
||||||
|
if(y > 255) y = 255;
|
||||||
|
if(y < 0) y = 0;
|
||||||
|
if(x < plst.at(0).x()) y = plst.at(0).y();
|
||||||
|
if(x > plst.at(1).x()) y = plst.at(1).y();
|
||||||
|
allLinePoints[x] = y;
|
||||||
|
linePoints.append(y);
|
||||||
|
linePoint.append(QPoint(x,y));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(col == RED){
|
||||||
|
redALLPoint.clear();
|
||||||
|
for(int i = 0; i < linePoint.size(); i++)
|
||||||
|
redALLPoint.append(linePoint.at(i).y());
|
||||||
|
}
|
||||||
|
if(col == GREEN){
|
||||||
|
greenALLPoint.clear();
|
||||||
|
for(int i = 0; i < linePoint.size(); i++)
|
||||||
|
greenALLPoint.append(linePoint.at(i).y());
|
||||||
|
}
|
||||||
|
if(col == BLUE){
|
||||||
|
blueALLPoint.clear();
|
||||||
|
for(int i = 0; i < linePoint.size(); i++)
|
||||||
|
blueALLPoint.append(linePoint.at(i).y());
|
||||||
|
}
|
||||||
|
if(col == GRAY){
|
||||||
|
grayALLPoint.clear();
|
||||||
|
for(int i = 0; i < linePoint.size(); i++)
|
||||||
|
grayALLPoint.append(linePoint.at(i).y());
|
||||||
|
}
|
||||||
|
if(col == RGB){
|
||||||
|
rgbALLPoint.clear();
|
||||||
|
for(int i = 0; i < linePoint.size(); i++)
|
||||||
|
{
|
||||||
|
rgbALLPoint.append(linePoint.at(i).y());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(int i = 0;i < len; i++){
|
||||||
|
delete[] a[i];
|
||||||
|
}
|
||||||
|
delete []a;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::drawAllPoint(QPainter &painter)
|
||||||
|
{
|
||||||
|
if(pointLst.size() > 0)
|
||||||
|
{
|
||||||
|
painter.setPen(QPen(Qt::white,1));
|
||||||
|
painter.setBrush(Qt::white);
|
||||||
|
for(int i = 0; i < pointLst.size(); i++){
|
||||||
|
painter.drawEllipse(pointLst.at(i),3,3);
|
||||||
|
}
|
||||||
|
if(dragPoint >= 0){
|
||||||
|
painter.setPen(QPen(QColor(0, 245, 255),2));
|
||||||
|
painter.drawEllipse(pointLst[dragPoint],4,4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(selectCol == GREEN){
|
||||||
|
greenLine.clear();
|
||||||
|
greenLine = QList<QPoint>(pointLst);
|
||||||
|
}
|
||||||
|
else if(selectCol == RED){
|
||||||
|
redLine.clear();
|
||||||
|
redLine = QList<QPoint>(pointLst);
|
||||||
|
}else if(selectCol == BLUE){
|
||||||
|
blueLine.clear();
|
||||||
|
blueLine = QList<QPoint>(pointLst);
|
||||||
|
}else if(selectCol == RGB){
|
||||||
|
rgbLine.clear();
|
||||||
|
rgbLine = QList<QPoint>(pointLst);
|
||||||
|
}else if(selectCol == GRAY){
|
||||||
|
grayLine.clear();
|
||||||
|
grayLine = QList<QPoint>(pointLst);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::drawCurveByColor(QPainter &painter)
|
||||||
|
{
|
||||||
|
qDebug() << selectCol;
|
||||||
|
switch (selectCol) {
|
||||||
|
case RGB:
|
||||||
|
painter.setPen(QPen(Qt::white,1));
|
||||||
|
drawLineFromPoint(rgbLine, RGB);
|
||||||
|
drawLineByVector(painter,rgbALLPoint);
|
||||||
|
if(redLine.size()>2 || redLine.at(0)!= QPoint(0,0) || redLine.at(1)!= QPoint(255,255)){
|
||||||
|
painter.setPen(QPen(Qt::red,1));
|
||||||
|
drawLineFromPoint(redLine,RED);
|
||||||
|
drawLineByVector(painter,redALLPoint);
|
||||||
|
}
|
||||||
|
if(blueLine.size()>2 || blueLine.at(0)!= QPoint(0,0) || blueLine.at(1)!= QPoint(255,255)){
|
||||||
|
painter.setPen(QPen(Qt::blue,1));
|
||||||
|
drawLineFromPoint(blueLine, BLUE);
|
||||||
|
drawLineByVector(painter,blueALLPoint);
|
||||||
|
}
|
||||||
|
if(greenLine.size()>2 || greenLine.at(0)!= QPoint(0,0) || greenLine.at(1)!= QPoint(255,255)){
|
||||||
|
painter.setPen(QPen(Qt::green,1));
|
||||||
|
drawLineFromPoint(greenLine, BLUE);
|
||||||
|
drawLineByVector(painter,greenALLPoint);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RED:
|
||||||
|
painter.setPen(QPen(Qt::red,1));
|
||||||
|
drawLineFromPoint(redLine,RED);
|
||||||
|
drawLineByVector(painter,redALLPoint);
|
||||||
|
break;
|
||||||
|
case BLUE:
|
||||||
|
painter.setPen(QPen(Qt::blue,1));
|
||||||
|
drawLineFromPoint(blueLine, BLUE);
|
||||||
|
drawLineByVector(painter,blueALLPoint);
|
||||||
|
break;
|
||||||
|
case GREEN:
|
||||||
|
painter.setPen(QPen(Qt::green,1));
|
||||||
|
drawLineFromPoint(greenLine, GREEN);
|
||||||
|
drawLineByVector(painter,greenALLPoint);
|
||||||
|
break;
|
||||||
|
case GRAY:
|
||||||
|
painter.setPen(QPen(Qt::white,1));
|
||||||
|
drawLineFromPoint(grayLine, GRAY);
|
||||||
|
drawLineByVector(painter,grayALLPoint);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
drawLineFromPoint(pointLst, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::drawLineByVector(QPainter &painter,QVector<int> &pVec)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < pVec.size()-1; i++){
|
||||||
|
painter.drawLine(QPoint(i,pVec.at(i)),QPoint(i+1,pVec.at(i+1)));
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
int Widget::caculateAllMi(int num, int n)
|
||||||
|
{
|
||||||
|
int val = 1;
|
||||||
|
if(n == 0) return 1;
|
||||||
|
for(int i = 0; i < n; i++){
|
||||||
|
val *= num;
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::getCurLineLUT(uchar *table, size_t length)
|
||||||
|
{
|
||||||
|
for(size_t i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
table[i] = allLinePoints[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<unsigned char> Widget::getCurLinePntVec()
|
||||||
|
{
|
||||||
|
return linePoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::updateCurLinePnt(const int& colType)
|
||||||
|
{
|
||||||
|
dragPoint = -1;
|
||||||
|
selectCol = colType;
|
||||||
|
if(selectCol == GREEN){
|
||||||
|
color = QColor(202, 255, 112);
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst = QList<QPoint>(greenLine);
|
||||||
|
ui->widget_2->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:0, x2:1, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(0, 255, 0, 255))}");
|
||||||
|
ui->widget->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:1, x2:0, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(0, 255, 0, 255))}");
|
||||||
|
}else if(selectCol == BLUE){
|
||||||
|
color = QColor(131, 111, 255);
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst = QList<QPoint>(blueLine);
|
||||||
|
ui->widget_2->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:0, x2:1, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(0, 0, 255, 255))}");
|
||||||
|
ui->widget->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:1, x2:0, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(0, 0, 255, 255))}");
|
||||||
|
}else if(selectCol == RED){
|
||||||
|
color = QColor(255, 160, 122);
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst = QList<QPoint>(redLine);
|
||||||
|
ui->widget_2->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:0, x2:1, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 0, 0, 255))}");
|
||||||
|
ui->widget->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:1, x2:0, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 0, 0, 255))}");
|
||||||
|
}else if(selectCol == GRAY){
|
||||||
|
color = Qt::gray;
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst = QList<QPoint>(grayLine);
|
||||||
|
ui->widget_2->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:0, x2:1, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))}");
|
||||||
|
ui->widget->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:1, x2:0, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))}");
|
||||||
|
}else if(selectCol == RGB){
|
||||||
|
color = Qt::gray;
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst = QList<QPoint>(rgbLine);
|
||||||
|
ui->widget_2->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:0, x2:1, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))}");
|
||||||
|
ui->widget->setStyleSheet("QWidget{background-color:qlineargradient("
|
||||||
|
"spread:pad, x1:0, y1:1, x2:0, y2:0, "
|
||||||
|
"stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))}");
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setXCoorVal(const int &xVal)
|
||||||
|
{
|
||||||
|
if(dragPoint >= 0){
|
||||||
|
int x = xVal;
|
||||||
|
if(pointLst[dragPoint] != pointLst.at(0) && pointLst[dragPoint] != pointLst.at(1)){
|
||||||
|
if(pointLst.size() == 3 && x > pointLst.at(0).x() && x < pointLst.at(1).x())
|
||||||
|
pointLst[dragPoint].setX(x);
|
||||||
|
|
||||||
|
if(pointLst.size() == 4){
|
||||||
|
if(dragPoint == 2){
|
||||||
|
if(pointLst[2].x() > pointLst[3].x() && x > pointLst[3].x() && x < pointLst[1].x())
|
||||||
|
pointLst[dragPoint].setX(x);
|
||||||
|
if(pointLst[2].x() < pointLst[3].x() && x < pointLst[3].x() && x > pointLst[0].x())
|
||||||
|
pointLst[dragPoint].setX(x);
|
||||||
|
}
|
||||||
|
else if(dragPoint == 3){
|
||||||
|
if(pointLst[2].x() < pointLst[3].x() && x > pointLst[2].x() && x < pointLst[1].x())
|
||||||
|
pointLst[dragPoint].setX(x);
|
||||||
|
if(pointLst[2].x() > pointLst[3].x() && x < pointLst[2].x() && x > pointLst[0].x())
|
||||||
|
pointLst[dragPoint].setX(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(pointLst[dragPoint] == pointLst.at(0)){
|
||||||
|
int min = 999;
|
||||||
|
for(int i = 1; i < pointLst.size(); i++){
|
||||||
|
if(min > pointLst[i].x()) min = pointLst[i].x();
|
||||||
|
}
|
||||||
|
if(x < min) pointLst[dragPoint].setX(x);
|
||||||
|
}
|
||||||
|
else if(pointLst[dragPoint] == pointLst.at(1)){
|
||||||
|
if(pointLst.size() > 2){
|
||||||
|
int max = 0;
|
||||||
|
for(int i = 2; i < pointLst.size(); i++){
|
||||||
|
if(max < pointLst[i].x()) max = pointLst[i].x();
|
||||||
|
}
|
||||||
|
if(x > max) pointLst[dragPoint].setX(x);
|
||||||
|
}
|
||||||
|
else if(pointLst.size() <= 2)
|
||||||
|
if(x > pointLst.at(0).x()) pointLst[dragPoint].setX(x);
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::setYCoorVal(const int &yVal)
|
||||||
|
{
|
||||||
|
if(dragPoint >= 0){
|
||||||
|
pointLst[dragPoint].setY(yVal);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::initSelectColLine(const int& colType)
|
||||||
|
{
|
||||||
|
pointLst.clear();
|
||||||
|
pointLst.append(QPoint(0,0));
|
||||||
|
pointLst.append(QPoint(255,255));
|
||||||
|
switch(colType){
|
||||||
|
case RED:
|
||||||
|
redLine.clear();
|
||||||
|
redLine.append(QPoint(0,0));
|
||||||
|
redLine.append(QPoint(255,255));
|
||||||
|
break;
|
||||||
|
case BLUE:
|
||||||
|
blueLine.clear();
|
||||||
|
blueLine.append(QPoint(0,0));
|
||||||
|
blueLine.append(QPoint(255,255));
|
||||||
|
break;
|
||||||
|
case GREEN:
|
||||||
|
greenLine.clear();
|
||||||
|
greenLine.append(QPoint(0,0));
|
||||||
|
greenLine.append(QPoint(255,255));
|
||||||
|
break;
|
||||||
|
case GRAY:
|
||||||
|
grayLine.clear();
|
||||||
|
grayLine.append(QPoint(0,0));
|
||||||
|
grayLine.append(QPoint(255,255));
|
||||||
|
break;
|
||||||
|
case RGB:
|
||||||
|
initAllLstPnt();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
dragPoint = -1;
|
||||||
|
leftMouseMv = false;
|
||||||
|
newPoint = false;
|
||||||
|
clickLine = false;
|
||||||
|
setMouseTracking(true);
|
||||||
|
qDebug() << "init";
|
||||||
|
updateCurLinePnt(colType);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::SetAllLinePnt(QVector<int> &all)
|
||||||
|
{
|
||||||
|
allLinePntSet = QVector<int>(all);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
#ifndef WIDGET_H
|
||||||
|
#define WIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
//#include "colorlinesetdef.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class Widget;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
//enum COLOR_TPYE
|
||||||
|
//{
|
||||||
|
// RGB,
|
||||||
|
// GRAY,
|
||||||
|
// RED,
|
||||||
|
// BLUE,
|
||||||
|
// GREEN
|
||||||
|
//};
|
||||||
|
|
||||||
|
class Widget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit Widget(QWidget *parent = nullptr);
|
||||||
|
~Widget();
|
||||||
|
void initAllLstPnt(); //初始化所有颜色曲线
|
||||||
|
void setLstPnt_RGB(const QList<QPoint>& plst); //设置生成RGB曲线的关键点(<=4)
|
||||||
|
QList<QPoint> getLstPnt_RGB()const; //获取生成RGB曲线的关键点
|
||||||
|
void setLstPnt_RED(const QList<QPoint>& plst);
|
||||||
|
QList<QPoint> getLstPnt_RED()const;
|
||||||
|
void setLstPnt_BLUE(const QList<QPoint>& plst);
|
||||||
|
QList<QPoint> getLstPnt_BLUE()const;
|
||||||
|
void setLstPnt_GREEN(const QList<QPoint>& plst);
|
||||||
|
QList<QPoint> getLstPnt_GREEN()const;
|
||||||
|
void setLstPnt_GRAY(const QList<QPoint>& plst);
|
||||||
|
QList<QPoint> getLstPnt_GRAY()const;
|
||||||
|
|
||||||
|
QVector<int> getRgbALLPoint();
|
||||||
|
QList<QPoint> getRgbKeyPoint()const;
|
||||||
|
void setRgbKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
QVector<int> getRedALLPoint();
|
||||||
|
QList<QPoint> getRedKeyPoint()const;
|
||||||
|
void setRedKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
QVector<int> getBlueALLPoint();
|
||||||
|
QList<QPoint> getBlueKeyPoint()const;
|
||||||
|
void setBlueKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
QVector<int> getGreenALLPoint();
|
||||||
|
QList<QPoint> getGreenKeyPoint()const;
|
||||||
|
void setGreenKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
QVector<int> getGrayALLPoint();
|
||||||
|
QList<QPoint> getGrayKeyPoint()const;
|
||||||
|
void setGrayKeyPoint(const QList<QPoint>& pVec);
|
||||||
|
|
||||||
|
void setHist_RGB(const QVector<int>& hist);//设置RGB的背景直方图
|
||||||
|
QVector<int> getHist_RGB()const;//获取RGB的背景直方图
|
||||||
|
void setHist_RED(const QVector<int>& hist);
|
||||||
|
QVector<int> getHist_RED()const;
|
||||||
|
void setHist_BLUE(const QVector<int>& hist);
|
||||||
|
QVector<int> getHist_BLUE()const;
|
||||||
|
void setHist_GREEN(const QVector<int>& hist);
|
||||||
|
QVector<int> getHist_GREEN()const;
|
||||||
|
void setHist_GRAY(const QVector<int>& hist);
|
||||||
|
QVector<int> getHist_GRAY()const;
|
||||||
|
|
||||||
|
void getCurLineLUT(uchar* table, size_t length = 256);//获取当前曲线上的所有点并存入table
|
||||||
|
QVector<unsigned char> getCurLinePntVec();//获取当前曲线上的所有点
|
||||||
|
void setXCoorVal(const int &xVal);//设置被选中的点的X坐标
|
||||||
|
void setYCoorVal(const int &yVal);//设置被选中的点的Y坐标
|
||||||
|
void updateCurLinePnt(const int& colType);//根据当前所选颜色(colType)重绘界面
|
||||||
|
void initSelectColLine(const int& colType);//初始化当前所选颜色(colType)界面的曲线
|
||||||
|
void SetAllLinePnt(QVector<int>& all);//设置自定义曲线的所有点
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void dragPointChecked(bool);//曲线上的点被选中的信号
|
||||||
|
void mouseLeaveSig();//鼠标离开控件的信号
|
||||||
|
void mouseCoordSig(QPoint pos);//鼠标的坐标信号
|
||||||
|
void lineChangeSig();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void initInterface();//初始化界面
|
||||||
|
void paintEvent(QPaintEvent *);
|
||||||
|
void mousePressEvent(QMouseEvent*);
|
||||||
|
void mouseMoveEvent(QMouseEvent*);
|
||||||
|
void mouseReleaseEvent(QMouseEvent*);
|
||||||
|
void enterEvent(QEvent*);
|
||||||
|
void leaveEvent(QEvent*);
|
||||||
|
void drawCoordinate(QPainter&);//画直角坐标
|
||||||
|
void drawBackgroudColor(QPainter&,QVector<int>&);//画背景直方图
|
||||||
|
void drawBackColorBySlc(QPainter&);//画不同的背景直方图
|
||||||
|
void drawCoorScale(QPainter&);//画虚线刻度
|
||||||
|
void drawLineFromPoint(QList<QPoint> &plst, const int &col);//根据多点求出曲线方程,并画出曲线
|
||||||
|
void drawAllPoint(QPainter&);//画出生成曲线的关键点
|
||||||
|
void drawCurveByColor(QPainter&);//画不同的颜色曲线
|
||||||
|
void drawLineByVector(QPainter&,QVector<int>&);//将数组的所有点连接绘制曲线
|
||||||
|
int caculateAllMi(int num,int n);//计算num的n次方的值
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::Widget *ui;
|
||||||
|
QVector<int> rgbBackColor;
|
||||||
|
QVector<int> redBackColor;
|
||||||
|
QVector<int> blueBackColor;
|
||||||
|
QVector<int> greenBackColor;
|
||||||
|
QVector<int> grayBackColor;
|
||||||
|
QVector<int> rgbALLPoint;
|
||||||
|
QVector<int> redALLPoint;
|
||||||
|
QVector<int> blueALLPoint;
|
||||||
|
QVector<int> greenALLPoint;
|
||||||
|
QVector<int> grayALLPoint;
|
||||||
|
QVector<int> allLinePntSet;
|
||||||
|
QVector<unsigned char> linePoints;
|
||||||
|
|
||||||
|
//QList<QPoint> points;
|
||||||
|
QList<QPoint> pointLst;
|
||||||
|
QList<QPoint> linePoint;
|
||||||
|
QList<QPoint> greenLine;
|
||||||
|
QList<QPoint> redLine;
|
||||||
|
QList<QPoint> blueLine;
|
||||||
|
QList<QPoint> rgbLine;
|
||||||
|
QList<QPoint> grayLine;
|
||||||
|
QColor color;
|
||||||
|
|
||||||
|
unsigned char allLinePoints[256];
|
||||||
|
bool leftMouseMv;
|
||||||
|
bool newPoint;
|
||||||
|
bool clickLine;
|
||||||
|
int dragPoint;
|
||||||
|
int selectCol;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // WIDGET_H
|
|
@ -0,0 +1,91 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Widget</class>
|
||||||
|
<widget class="QWidget" name="Widget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>556</width>
|
||||||
|
<height>484</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Widget</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout" rowstretch="50,1" columnstretch="1,50">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QWidget" name="widget" native="true">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="mouseTracking">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::WheelFocus</enum>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QWidget{background-color:qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QWidget" name="table" native="true">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="mouseTracking">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="focusPolicy">
|
||||||
|
<enum>Qt::NoFocus</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QWidget" name="widget_2" native="true">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">QWidget{background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))}</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -45,6 +45,8 @@ INCLUDEPATH += $$PWD/../../../../sdk/include/
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
../../../app/scanner/app_cfg.cpp \
|
../../../app/scanner/app_cfg.cpp \
|
||||||
|
../../../app/scanner/cutdialog.cpp \
|
||||||
|
../../../app/scanner/cutpapertool.cpp \
|
||||||
../../../app/scanner/device_menu.cpp \
|
../../../app/scanner/device_menu.cpp \
|
||||||
../../../app/scanner/dialog_aquireinto.cpp \
|
../../../app/scanner/dialog_aquireinto.cpp \
|
||||||
../../../app/scanner/dialog_clrcache.cpp \
|
../../../app/scanner/dialog_clrcache.cpp \
|
||||||
|
@ -64,11 +66,14 @@ SOURCES += \
|
||||||
../../../app/scanner/dialog_passwordchange.cpp \
|
../../../app/scanner/dialog_passwordchange.cpp \
|
||||||
../../../app/scanner/dialog_saveas.cpp \
|
../../../app/scanner/dialog_saveas.cpp \
|
||||||
../../../app/scanner/dialog_savequality.cpp \
|
../../../app/scanner/dialog_savequality.cpp \
|
||||||
|
../../../app/scanner/gaosixy.cpp \
|
||||||
../../../app/scanner/graphicsscene.cpp \
|
../../../app/scanner/graphicsscene.cpp \
|
||||||
../../../app/scanner/hg_settingdialog.cpp \
|
../../../app/scanner/hg_settingdialog.cpp \
|
||||||
../../../app/scanner/main.cpp \
|
../../../app/scanner/main.cpp \
|
||||||
../../../app/scanner/mainwindow.cpp \
|
../../../app/scanner/mainwindow.cpp \
|
||||||
../../../app/scanner/sane_device.cpp \
|
../../../app/scanner/sane_device.cpp \
|
||||||
|
../../../app/scanner/setpicclrtool.cpp \
|
||||||
|
../../../app/scanner/widget.cpp \
|
||||||
../../../app/scanner/widget_imgproc_base.cpp \
|
../../../app/scanner/widget_imgproc_base.cpp \
|
||||||
../../../app/scanner/widget_statusbar.cpp \
|
../../../app/scanner/widget_statusbar.cpp \
|
||||||
../../../app/scanner/dialog_admin.cpp \
|
../../../app/scanner/dialog_admin.cpp \
|
||||||
|
@ -83,6 +88,8 @@ SOURCES += \
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
../../../app/scanner/app_cfg.h \
|
../../../app/scanner/app_cfg.h \
|
||||||
|
../../../app/scanner/cutdialog.h \
|
||||||
|
../../../app/scanner/cutpapertool.h \
|
||||||
../../../app/scanner/device_menu.h \
|
../../../app/scanner/device_menu.h \
|
||||||
../../../app/scanner/dialog_aquireinto.h \
|
../../../app/scanner/dialog_aquireinto.h \
|
||||||
../../../app/scanner/dialog_clrcache.h \
|
../../../app/scanner/dialog_clrcache.h \
|
||||||
|
@ -102,10 +109,13 @@ HEADERS += \
|
||||||
../../../app/scanner/dialog_passwordchange.h \
|
../../../app/scanner/dialog_passwordchange.h \
|
||||||
../../../app/scanner/dialog_saveas.h \
|
../../../app/scanner/dialog_saveas.h \
|
||||||
../../../app/scanner/dialog_savequality.h \
|
../../../app/scanner/dialog_savequality.h \
|
||||||
|
../../../app/scanner/gaosixy.h \
|
||||||
../../../app/scanner/graphicsscene.h \
|
../../../app/scanner/graphicsscene.h \
|
||||||
../../../app/scanner/hg_settingdialog.h \
|
../../../app/scanner/hg_settingdialog.h \
|
||||||
../../../app/scanner/mainwindow.h \
|
../../../app/scanner/mainwindow.h \
|
||||||
../../../app/scanner/sane_device.h \
|
../../../app/scanner/sane_device.h \
|
||||||
|
../../../app/scanner/setpicclrtool.h \
|
||||||
|
../../../app/scanner/widget.h \
|
||||||
../../../app/scanner/widget_imgproc_base.h \
|
../../../app/scanner/widget_imgproc_base.h \
|
||||||
../../../app/scanner/widget_statusbar.h \
|
../../../app/scanner/widget_statusbar.h \
|
||||||
../../../app/scanner/dialog_admin.h \
|
../../../app/scanner/dialog_admin.h \
|
||||||
|
@ -119,6 +129,8 @@ HEADERS += \
|
||||||
../../../utility/HGString.h
|
../../../utility/HGString.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
|
../../../app/scanner/cutdialog.ui \
|
||||||
|
../../../app/scanner/cutpapertool.ui \
|
||||||
../../../app/scanner/dialog_admin.ui \
|
../../../app/scanner/dialog_admin.ui \
|
||||||
../../../app/scanner/dialog_aquireinto.ui \
|
../../../app/scanner/dialog_aquireinto.ui \
|
||||||
../../../app/scanner/dialog_clrcache.ui \
|
../../../app/scanner/dialog_clrcache.ui \
|
||||||
|
@ -139,6 +151,8 @@ FORMS += \
|
||||||
../../../app/scanner/dialog_saveas.ui \
|
../../../app/scanner/dialog_saveas.ui \
|
||||||
../../../app/scanner/dialog_savequality.ui \
|
../../../app/scanner/dialog_savequality.ui \
|
||||||
../../../app/scanner/mainwindow.ui \
|
../../../app/scanner/mainwindow.ui \
|
||||||
|
../../../app/scanner/setpicclrtool.ui \
|
||||||
|
../../../app/scanner/widget.ui \
|
||||||
../../../app/scanner/widget_imgproc_base.ui \
|
../../../app/scanner/widget_imgproc_base.ui \
|
||||||
../../../app/scanner/widget_statusbar.ui \
|
../../../app/scanner/widget_statusbar.ui \
|
||||||
../../../app/scanner/dialog_log.ui
|
../../../app/scanner/dialog_log.ui
|
||||||
|
|
Loading…
Reference in New Issue