-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathworkspace.cpp
113 lines (94 loc) · 2.76 KB
/
workspace.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include "workspace.h"
WorkSpace::WorkSpace(QWidget *parent) :
QWidget(parent), _maskPixmap(0), _isMaskCreate(false), _step(60)
{
_pixmap = new QPixmap;
}
WorkSpace::~WorkSpace()
{
delete _pixmap;
delete _maskPixmap;
}
void WorkSpace::setPixmap(const QStringList &paths)
{
if(paths.isEmpty()) return;
_images = paths;
_pixmap->load(_images.takeFirst());
_pixmapWidth = _pixmap->width();
_pixmapHeight = _pixmap->height();
_maskPixmap = new QPixmap(_pixmapWidth, _pixmapHeight);
setFixedSize(_pixmapWidth, _pixmapHeight);
setCircleCentre(QPointF(0,0));
setCircleSize(100,100);
}
void WorkSpace::paintEvent(QPaintEvent *)
{
if(_maskPixmap != 0){
QPainter painter(this);
painter.drawPixmap(0, 0, *_pixmap);
painter.save();
painter.setPen(Qt::white);
painter.drawEllipse(_circleCenter, _circleW, _circleH);
painter.restore();
}
}
void WorkSpace::setCircleCentre(const QPointF &point)
{
_circleCenter = QPointF((_pixmapWidth / 2) + point.x(),
(_pixmapHeight / 2) + point.y());
repaint();
}
void WorkSpace::setCircleSize(qreal w, qreal h)
{
_circleW = w;
_circleH = h;
repaint();
}
void WorkSpace::createMask()
{
_maskPixmap->fill(Qt::black);
QPainter painter(_maskPixmap);
painter.setPen(Qt::white);
painter.setBrush(Qt::white);
painter.drawEllipse(_circleCenter, _circleW, _circleH);
_mask = _maskPixmap->createMaskFromColor(Qt::black);
_isMaskCreate = true;
repaint();
}
void WorkSpace::start()
{
if(!_isMaskCreate){
QMessageBox::warning(0, tr("Предупреждение!"), tr("Нет маски!"));
}
else{
QFile file("c:/LOVRIO-197001010000.rio");
if(file.exists()) file.remove();
if(file.open(QIODevice::Append)){
QTextStream in(&file);
int index = 0;
//double count = _circleW * _circleH;
while(!_images.isEmpty()){
_pixmap->setMask(_mask);
repaint();
qApp->processEvents();
QImage image = _pixmap->toImage();
double sum = 0;
for(int w = 0; w < _pixmapWidth; ++w){
for(int h = 0; h < _pixmapHeight; ++h){
QColor color(image.pixel(w,h));
sum += color.redF();
}
}
QString text(QString::number(index * _step));
text.append(" ");
text.append(QString::number(sum));
text.append("\r\n");
in << text;
_pixmap->load(_images.takeFirst());
++index;
}
}
repaint();
file.close();
}
}