/*!
* This file is part of CameraPlus.
*
- * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
#include "roi.h"
#include "qtcamroi.h"
+#include "qtcamdevice.h"
+#include "qtcamviewfinder.h"
+
+class UnNormalizer {
+public:
+ void init(const QRectF& renderArea, bool normalize) {
+ m_area = renderArea;
+ m_normalize = normalize;
+ }
+
+ QRectF unNormalize(const QRectF& rect) {
+ if (m_normalize) {
+ return rect;
+ }
+
+ return QRectF(rect.x() * m_area.width(),
+ rect.y() * m_area.height(),
+ rect.width() * m_area.width(),
+ rect.height() * m_area.height());
+ }
+
+ QVariantList unNormalize(const QList<QRectF>& rects) {
+ QVariantList vars;
+
+ foreach (const QRectF& rect, rects) {
+ vars.append(QVariant::fromValue(unNormalize(rect)));
+ }
+
+ return vars;
+ }
+
+private:
+ QRectF m_area;
+ bool m_normalize;
+};
Roi::Roi(QtCamDevice *device, QObject *parent) :
QObject(parent),
- m_roi(new QtCamRoi(device)) {
+ m_roi(new QtCamRoi(device)),
+ m_normalize(true) {
QObject::connect(m_roi,
SIGNAL(regionsOfInterestUpdated(const QList<QRectF>&, const QRectF&, const QList<QRectF>&)),
void Roi::handleRegionsChanged(const QList<QRectF>& regions, const QRectF& primary,
const QList<QRectF>& rest) {
- QVariantList regionsList = variantList(regions);
- QVariantList restList = variantList(rest);
- QVariant primaryRect = QVariant::fromValue(primary);
+ UnNormalizer n;
+
+ n.init(m_roi->device()->viewfinder()->renderArea(), m_normalize);
+
+ QVariantList regionsList = n.unNormalize(regions);
+ QVariantList restList = n.unNormalize(rest);
+ QVariant primaryRect = QVariant::fromValue(n.unNormalize(primary));
emit regionsChanged(regionsList, primaryRect, restList);
}
-QVariantList Roi::variantList(const QList<QRectF>& rects) {
- QVariantList list;
+bool Roi::normalize() const {
+ return m_normalize;
+}
- foreach(const QRectF& rect, rects) {
- list.append(QVariant::fromValue(rect));
+void Roi::setNormalize(bool normalize) {
+ if (normalize != m_normalize) {
+ m_normalize = normalize;
+ emit normalizeChanged();
}
-
- return list;
}