Skip to content
Snippets Groups Projects
bsstructureview.cpp 5.72 KiB
#include <QtGui>
#include <iostream>
#include "bsstructureview.h"
#include "math.h"

using namespace std;


BSStructureView::BSStructureView (QImage *im, BSDetector *sd)
{
  graylevelImage = im;
  currentImage = im;
  det = sd;
  int w = im->width ();
  int h = im->height ();
  imageInBack = true;
  gradImage = NULL;
  gradInBack = false;
  setBackgroundBrush (QBrush (*currentImage));
  setScene (new QGraphicsScene (0, 0, w, h));
  grid = new BSStructureItem (w, h, im, sd);
  scene()->addItem (grid);
  setWindowTitle (grid->itemTitle ());
}


BSStructureView::~BSStructureView ()
{
  scene()->removeItem (grid);
  delete grid;
  delete gradImage;
}


void BSStructureView::setGradientImage (VMap *gMap)
{
  if (gradImage != NULL) delete gradImage;
  int w = gMap->getWidth ();
  int h = gMap->getHeight ();
  double gn[w * h];
  for (int j = 0; j < h; j++)
    for (int i = 0; i < w; i++)
      gn[j * w + i] = gMap->cmpNorm (i, j);
      // gn[j * w + i] = sqrt (gMap->sqNorm (i, j));
  double max = 0;
  for (int i = 0; i < w * h; i++) if (max < gn[i]) max = gn[i];
  gradImage = new QImage (w, h, QImage::Format_RGB32);
  for (int j = 0; j < h; j++)
    for (int i = 0; i < w; i++)
    {
      uint val = (uint) (gn[(h - 1 - j) * w + i] * 255 / max);
      gradImage->setPixel (i, j, val + val * 256 + val * 256 * 256);
    }
  // gradImage->save ("gradient.png");
}


void BSStructureView::updateBackground (bool zoomChanged)
{
  if (imageInBack)
  {
    int w = currentImage->width ();
    int h = currentImage->height ();
    int zf = grid->zoomFactor ();
    if (zoomChanged) image = currentImage->scaled (w * zf, h * zf);
    QBrush qb (image);
    qb.setTransform (QTransform::fromTranslate (
          w / 2 - zf * (w / 2 + grid->focusX ()),
          h / 2 - zf * (h / 2 + grid->focusY ())));
    setBackgroundBrush (qb);