10#include "fitshistogramcommand.h"
11#include "fitshistogrameditor.h"
12#include "fitsviewer.h"
13#include "fits_debug.h"
24FITSHistogramCommand::~FITSHistogramCommand()
29bool FITSHistogramCommand::calculateDelta(
const uint8_t * buffer)
31 uint8_t
const *
image_buffer = m_ImageData->getImageBuffer();
32 uint32_t
totalPixels = m_ImageData->samplesPerChannel() * m_ImageData->channels();
39 qCWarning(
KSTARS_FITS) <<
"Error! not enough memory to create image delta";
48 delta =
new uint8_t[compressedBytes];
54 <<
"FITSHistogram Error: Ran out of memory compressing delta";
65 <<
"FITSHistogram Error: Failed to compress raw_delta";
73bool FITSHistogramCommand::reverseDelta()
75 uint8_t
const *
image_buffer = m_ImageData->getImageBuffer();
76 uint32_t
totalPixels = m_ImageData->samplesPerChannel() * m_ImageData->channels();
83 qCWarning(
KSTARS_FITS) <<
"Error! not enough memory to create output image";
92 qCWarning(
KSTARS_FITS) <<
"Error! not enough memory to create image delta";
100 <<
"FITSHistogram compression error in reverseDelta()";
116void FITSHistogramCommand::redo()
118 uint8_t
const *
image_buffer = m_ImageData->getImageBuffer();
119 uint8_t * buffer =
nullptr;
120 uint32_t
totalPixels = m_ImageData->samplesPerChannel() * m_ImageData->channels();
121 int BBP = m_ImageData->getBytesPerPixel();
125 if (delta !=
nullptr)
132 m_ImageData->restoreStatistics(stats);
138 m_ImageData->saveStatistics(stats);
141 if (type >= FITS_ROTATE_CW && type <= FITS_MOUNT_FLIP_V)
143 m_ImageData->applyFilter(type);
149 if (buffer ==
nullptr)
163 m_ImageData->applyFilter(FITS_LINEAR,
nullptr, &
dataMin, &
dataMax);
175 m_ImageData->applyFilter(type);
179 calculateDelta(buffer);
199void FITSHistogramCommand::undo()
203 if (delta !=
nullptr)
210 m_ImageData->restoreStatistics(stats);
219 m_ImageData->applyFilter(FITS_ROTATE_CCW);
221 case FITS_ROTATE_CCW:
222 m_ImageData->applyFilter(FITS_ROTATE_CW);
224 case FITS_MOUNT_FLIP_H:
225 case FITS_MOUNT_FLIP_V:
226 m_ImageData->applyFilter(type);
248QString FITSHistogramCommand::text()
const
253 return i18n(
"Auto Scale");
255 return i18n(
"Linear Scale");
257 return i18n(
"Logarithmic Scale");
259 return i18n(
"Square Root Scale");
262 if (type - 1 <= FITSViewer::filterTypes.count())
263 return FITSViewer::filterTypes.at(type - 1);
267 return i18n(
"Unknown");
QString i18n(const char *text, const TYPE &arg...)
Type type(const QSqlDatabase &db)
void restoreOverrideCursor()
void setOverrideCursor(const QCursor &cursor)