Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef IMAGEVIEW_H_
00009 #define IMAGEVIEW_H_
00010
00011 #include "rtabmap/gui/RtabmapGuiExp.h"
00012
00013 #include <QWidget>
00014 #include <QtGui/QPainter>
00015
00016 class RTABMAPGUI_EXP UImageView : public QWidget
00017 {
00018 Q_OBJECT;
00019 public:
00020 UImageView(QWidget * parent = 0) : QWidget(parent) {}
00021 ~UImageView() {}
00022 void setBackgroundBrush(const QBrush & brush) {brush_ = brush;}
00023
00024 public Q_SLOTS:
00025 void setImage(const QImage & image)
00026 {
00027 pixmap_ = QPixmap::fromImage(image);
00028 this->update();
00029 }
00030
00031 private:
00032 void computeScaleOffsets(float & scale, float & offsetX, float & offsetY)
00033 {
00034 scale = 1.0f;
00035 offsetX = 0.0f;
00036 offsetY = 0.0f;
00037
00038 if(!pixmap_.isNull())
00039 {
00040 float w = pixmap_.width();
00041 float h = pixmap_.height();
00042 float widthRatio = float(this->rect().width()) / w;
00043 float heightRatio = float(this->rect().height()) / h;
00044
00045 if(widthRatio < heightRatio)
00046 {
00047 scale = widthRatio;
00048 }
00049 else
00050 {
00051 scale = heightRatio;
00052 }
00053
00054 w *= scale;
00055 h *= scale;
00056
00057 if(w < this->rect().width())
00058 {
00059 offsetX = (this->rect().width() - w)/2.0f;
00060 }
00061 if(h < this->rect().height())
00062 {
00063 offsetY = (this->rect().height() - h)/2.0f;
00064 }
00065 }
00066 }
00067
00068 protected:
00069 virtual void paintEvent(QPaintEvent *event)
00070 {
00071 QPainter painter(this);
00072
00073
00074 painter.save();
00075 painter.setBrush(brush_);
00076 painter.drawRect(this->rect());
00077 painter.restore();
00078
00079 if(!pixmap_.isNull())
00080 {
00081 painter.save();
00082
00083 float ratio, offsetX, offsetY;
00084 this->computeScaleOffsets(ratio, offsetX, offsetY);
00085 painter.translate(offsetX, offsetY);
00086 painter.scale(ratio, ratio);
00087 painter.drawPixmap(QPoint(0,0), pixmap_);
00088 painter.restore();
00089 }
00090 }
00091
00092 private:
00093 QPixmap pixmap_;
00094 QBrush brush_;
00095 };
00096
00097
00098 #endif