#include "rm_widget_zoom_pos.h" #include #include "../rm_include.h" #include "../core/rm_math.h" RMWidgetZoomPos::RMWidgetZoomPos(QWidget *parent) : QWidget(parent) { _x = 0.25; _y = 0.25; _startX = 0.25; _startY = 0.25; } #if (USE_ZOOM_WH_RATIO) void RMWidgetZoomPos::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPen pen(Qt::red); _painter.begin(this); _painter.setPen(pen); _painter.setRenderHint(QPainter::Antialiasing, false); // ROI 는 영상/화면 비율과 관계없으나 표시 영역은 관계가 있음. // 사용할 수 있는 넓이 = height * WHR (width/height ratio) int widthDiff = (size().width() - (int)(((double)size().height()) * _whr)); //QRect max = QRect(widthDiff,0,size.width()-widthDiff,size().height()); QSize s = QSize((size().width() - widthDiff) / 2,size().height() / 2); // ROI 로 계산한 영역 QRect box = QRect(_x * size().width() + (widthDiff / 2),_y * size().height(),s.width(),s.height()); if(box.right() >= (size().width() - (widthDiff / 2))) { box = QRect(box.x() -(widthDiff / 2),box.y(),box.width(),box.height()); } // 비디오 영역도 처리 //box = QRectAspect(box,_whr); _painter.drawRect(box); _painter.end(); } #else void RMWidgetZoomPos::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPen pen(Qt::red); _painter.begin(this); _painter.setPen(pen); _painter.setRenderHint(QPainter::Antialiasing, false); QSize s = size() / 2; QRect box = QRect(_x * size().width(),_y * size().height(),s.width(),s.height()); _painter.drawRect(box); _painter.end(); } #endif // #if (USE_ZOOM_WH_RATIO) void RMWidgetZoomPos::setPos(float x, float y) { //qInfo() << whr; _x = MIN(MAX(_startX + x,0),0.5); _y = MIN(MAX(_startY + y,0),0.5); update(); }