-
even authored728a7172
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);