From 1ec9d1095ceff86f04236509d4d484542c1e1aa4 Mon Sep 17 00:00:00 2001 From: Charlie Angela Mehlenbeck Date: Sun, 9 Jan 2022 23:57:47 -0500 Subject: [PATCH 1/3] continuous brush stroke working --- src/image_canvas.cpp | 34 ++++++++++++++--------------- src/image_canvas.h | 8 +++---- src/image_mask.cpp | 52 +++++++++++++++++++++++++++++--------------- src/image_mask.h | 6 ++--- 4 files changed, 57 insertions(+), 43 deletions(-) diff --git a/src/image_canvas.cpp b/src/image_canvas.cpp index 43f94bd..4686534 100644 --- a/src/image_canvas.cpp +++ b/src/image_canvas.cpp @@ -138,12 +138,22 @@ void ImageCanvas::paintEvent(QPaintEvent *event) { } } +QPoint ImageCanvas::_get_pen_pose(QMouseEvent * e) { + int x = e->x() / _scale; + int y = e->y() / _scale; + return QPoint(x,y); +} + void ImageCanvas::mouseMoveEvent(QMouseEvent * e) { _mouse_pos.setX(e->x()); _mouse_pos.setY(e->y()); - if (_button_is_pressed) - _drawFillCircle(e); + if (_button_is_pressed) { + QPoint cur_point = _get_pen_pose(e); + _mask.drawLine(_prev_point, cur_point, _pen_size, _color); + _prev_point = cur_point; + update(); + } update(); } @@ -152,7 +162,6 @@ void ImageCanvas::setSizePen(int pen_size) { _pen_size = pen_size; } - void ImageCanvas::mouseReleaseEvent(QMouseEvent * e) { if(e->button() == Qt::LeftButton) { _button_is_pressed = false; @@ -212,23 +221,12 @@ void ImageCanvas::mouseReleaseEvent(QMouseEvent * e) { void ImageCanvas::mousePressEvent(QMouseEvent * e) { setFocus(); - if (e->button() == Qt::LeftButton) { + if (e->button() == Qt::LeftButton) { + _prev_point = _get_pen_pose(e); _button_is_pressed = true; - _drawFillCircle(e); - } -} - -void ImageCanvas::_drawFillCircle(QMouseEvent * e) { - if (_pen_size > 0) { - int x = e->x() / _scale - _pen_size / 2; - int y = e->y() / _scale - _pen_size / 2; - _mask.drawFillCircle(x, y, _pen_size, _color); - } else { - int x = (e->x()+0.5) / _scale ; - int y = (e->y()+0.5) / _scale ; - _mask.drawPixel(x, y, _color); + _mask.drawFillCircle(_get_pen_pose(e), _pen_size, _color); + update(); } - update(); } void ImageCanvas::clearMask() { diff --git a/src/image_canvas.h b/src/image_canvas.h index 6b5e1d7..2ee4d41 100644 --- a/src/image_canvas.h +++ b/src/image_canvas.h @@ -52,8 +52,8 @@ public slots : private: MainWindow *_ui; - void _initPixmap(); - void _drawFillCircle(QMouseEvent * e); + void _initPixmap(); + QPoint _get_pen_pose(QMouseEvent * e); QScrollArea *_scroll_parent ; double _scale ; @@ -71,9 +71,9 @@ public slots : ColorMask _color ; int _pen_size ; bool _button_is_pressed; - + QPoint _prev_point ; }; -#endif //IMAGE_CANVAS_H \ No newline at end of file +#endif //IMAGE_CANVAS_H diff --git a/src/image_mask.cpp b/src/image_mask.cpp index be4ffa1..2b6379b 100644 --- a/src/image_mask.cpp +++ b/src/image_mask.cpp @@ -15,29 +15,45 @@ ImageMask::ImageMask(QSize s) { color.fill(QColor(0, 0, 0)); } -void ImageMask::drawFillCircle(int x, int y, int pen_size, ColorMask cm) { - QPen pen(QBrush(cm.id), 1.0); +void ImageMask::drawLine(QPoint p1, QPoint p2, int pen_size, ColorMask cm) { QPainter painter_id(&id); - painter_id.setRenderHint(QPainter::Antialiasing, false); - painter_id.setPen(pen); - painter_id.setBrush(QBrush(cm.id)); - painter_id.drawEllipse(x, y, pen_size, pen_size); + painter_id.setRenderHint(QPainter::Antialiasing, false); + painter_id.setPen(QPen(cm.id, pen_size, Qt::SolidLine, Qt::RoundCap, + Qt::RoundJoin)); + painter_id.drawLine(p1, p2); painter_id.end(); - QPainter painter_color(&color); - QPen pen_color(QBrush(cm.color), 1.0); - painter_color.setRenderHint(QPainter::Antialiasing, false); - painter_color.setPen(pen_color); - painter_color.setBrush(QBrush(cm.color)); - painter_color.drawEllipse(x, y, pen_size, pen_size); - painter_color.end(); + QPainter painter_color(&color); + painter_color.setRenderHint(QPainter::Antialiasing, false); + painter_color.setPen(QPen(cm.color, pen_size, Qt::SolidLine, Qt::RoundCap, + Qt::RoundJoin)); + painter_color.drawLine(p1, p2); + painter_color.end(); } +void ImageMask::drawFillCircle(QPoint point, int pen_size, ColorMask cm) { + if(pen_size<=1) { + id.setPixelColor(point, cm.id); + color.setPixelColor(point, cm.color); + } + else { + pen_size = (pen_size-1)/2; + QPen pen(QBrush(cm.id), 1.0); + QPainter painter_id(&id); + painter_id.setRenderHint(QPainter::Antialiasing, false); + painter_id.setPen(pen); + painter_id.setBrush(QBrush(cm.id)); + painter_id.drawEllipse(point, pen_size, pen_size); + painter_id.end(); -void ImageMask::drawPixel(int x, int y, ColorMask cm) { - id.setPixelColor(x, y, cm.id); - color.setPixelColor(x, y, cm.color); + QPainter painter_color(&color); + QPen pen_color(QBrush(cm.color), 1.0); + painter_color.setRenderHint(QPainter::Antialiasing, false); + painter_color.setPen(pen_color); + painter_color.setBrush(QBrush(cm.color)); + painter_color.drawEllipse(point, pen_size, pen_size); + painter_color.end(); + } } - void ImageMask::updateColor(const Id2Labels & labels) { idToColor(id, labels, &color); } @@ -54,4 +70,4 @@ void ImageMask::exchangeLabel(int x, int y, const Id2Labels& id_labels, ColorMas id = mat2QImage(id_mat); color = idToColor(id, id_labels); -} \ No newline at end of file +} diff --git a/src/image_mask.h b/src/image_mask.h index 494a5d0..5ce23b1 100644 --- a/src/image_mask.h +++ b/src/image_mask.h @@ -17,10 +17,10 @@ struct ImageMask { ImageMask(const QString &file, Id2Labels id_labels); ImageMask(QSize s); - void drawFillCircle(int x, int y, int pen_size, ColorMask cm); - void drawPixel(int x, int y, ColorMask cm); + void drawLine(QPoint p1, QPoint p2, int pen_size, ColorMask cm); + void drawFillCircle(QPoint point, int pen_size, ColorMask cm); void updateColor(const Id2Labels & labels); void exchangeLabel(int x, int y, const Id2Labels & id_labels, ColorMask cm); }; -#endif \ No newline at end of file +#endif From c24a24fff680bdd862b6b5fdbaed8ecbdb6c8405 Mon Sep 17 00:00:00 2001 From: Charlie Angela Mehlenbeck Date: Mon, 10 Jan 2022 00:03:57 -0500 Subject: [PATCH 2/3] - redundant update --- src/image_canvas.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/image_canvas.cpp b/src/image_canvas.cpp index 4686534..5d09023 100644 --- a/src/image_canvas.cpp +++ b/src/image_canvas.cpp @@ -154,8 +154,6 @@ void ImageCanvas::mouseMoveEvent(QMouseEvent * e) { _prev_point = cur_point; update(); } - - update(); } void ImageCanvas::setSizePen(int pen_size) { From c25a25af08afb81b38b3a200de01fbb16720b283 Mon Sep 17 00:00:00 2001 From: Charlie Angela Mehlenbeck Date: Mon, 10 Jan 2022 00:39:04 -0500 Subject: [PATCH 3/3] opps - wrong update to remove --- src/image_canvas.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/image_canvas.cpp b/src/image_canvas.cpp index 5d09023..103d915 100644 --- a/src/image_canvas.cpp +++ b/src/image_canvas.cpp @@ -152,8 +152,8 @@ void ImageCanvas::mouseMoveEvent(QMouseEvent * e) { QPoint cur_point = _get_pen_pose(e); _mask.drawLine(_prev_point, cur_point, _pen_size, _color); _prev_point = cur_point; - update(); } + update(); } void ImageCanvas::setSizePen(int pen_size) {