71 lines
1.8 KiB
C++
71 lines
1.8 KiB
C++
/***************************************************************************
|
|
* Copyright (C) 2011 by gempa GmbH
|
|
*
|
|
* Author: Jan Becker
|
|
* Email: jabe@gempa.de
|
|
***************************************************************************/
|
|
|
|
|
|
#ifndef __GEMPA_SPECTROGRAM_IMAGE_H__
|
|
#define __GEMPA_SPECTROGRAM_IMAGE_H__
|
|
|
|
|
|
#include <seiscomp/gui/core/gradient.h>
|
|
#include <gempa/utils/lut.h>
|
|
#include <gempa/gui/api.h>
|
|
|
|
#include <QImage>
|
|
|
|
|
|
namespace Gempa {
|
|
namespace Gui {
|
|
|
|
|
|
template <typename T> class Spectrogram;
|
|
|
|
typedef Gempa::Utils::LUT<double,QRgb> ColorLUT;
|
|
|
|
template <int N>
|
|
class StaticColorLUT : public Gempa::Utils::StaticLUT<double,QRgb,N> {
|
|
public:
|
|
StaticColorLUT() {}
|
|
StaticColorLUT(const Seiscomp::Gui::Gradient &gradient) {
|
|
generateFrom(gradient);
|
|
}
|
|
|
|
public:
|
|
bool setRangeFrom(const Seiscomp::Gui::Gradient &gradient) {
|
|
if ( gradient.empty() ) return false;
|
|
|
|
double lower = gradient.begin().key();
|
|
double upper = (--gradient.end()).key();
|
|
Gempa::Utils::StaticLUT<double,QRgb,N>::setRange(lower, upper);
|
|
|
|
return true;
|
|
}
|
|
|
|
void generateFrom(const Seiscomp::Gui::Gradient &gradient) {
|
|
if ( !setRangeFrom(gradient) ) return;
|
|
for ( int i = 0; i < N; ++i )
|
|
Utils::StaticLUT<double,QRgb,N>::_staticLUT[i] =
|
|
gradient.colorAt(Utils::StaticLUT<double,QRgb,N>::indexToKey(i)).rgba();
|
|
}
|
|
};
|
|
|
|
|
|
template <typename T>
|
|
bool generateImageCW(QImage &img, const Spectrogram<T> *spec, const ColorLUT *lut,
|
|
int width, int height, int columnOffset = 0,
|
|
int columnWidth = -1);
|
|
|
|
template <typename T>
|
|
bool generateImagePPS(QImage &img, const Spectrogram<T> *spec, const ColorLUT *lut,
|
|
int width, int height, int columnOffset = 0,
|
|
double pixelPerSecond = 1.0);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|