21#ifndef KIS_MATH_TOOLBOX_H
22#define KIS_MATH_TOOLBOX_H
28#include <kis_generic_registry.h>
29#include "kis_paint_device.h"
34class KisMathToolbox :
public TQObject {
38 struct KisFloatRepresentation {
39 KisFloatRepresentation(uint nsize, uint ndepth) : coeffs(new float[nsize*nsize*ndepth]) ,size(nsize), depth(ndepth)
42 for (TQ_UINT32 i = 0; i < nsize*nsize*ndepth; ++i) {
46 ~KisFloatRepresentation() {
if(coeffs)
delete[] coeffs; }
51 typedef KisFloatRepresentation KisWavelet;
53 KisMathToolbox(KisID
id);
56 inline KisID id() {
return m_id; };
61 inline KisWavelet* initWavelet(KisPaintDeviceSP lay,
const TQRect&);
62 inline uint fastWaveletTotalSteps(
const TQRect&);
71 virtual KisWavelet* fastWaveletTransformation(KisPaintDeviceSP src,
const TQRect&, KisWavelet* buff = 0) =0;
81 virtual void fastWaveletUntransformation(KisPaintDeviceSP dst,
const TQRect&, KisWavelet* wav, KisWavelet* buff = 0) =0;
89 void transformToFR(KisPaintDeviceSP src, KisFloatRepresentation*,
const TQRect&);
94 void transformFromFR(KisPaintDeviceSP dst, KisFloatRepresentation*,
const TQRect&);
101 KisMathToolboxFactoryRegistry();
102 ~KisMathToolboxFactoryRegistry();
106inline KisMathToolbox::KisWavelet* KisMathToolbox::initWavelet(KisPaintDeviceSP src,
const TQRect& rect)
109 int maxrectsize = (rect.height() < rect.width()) ? rect.width() : rect.height();
110 for(size = 2; size < maxrectsize; size *= 2) ;
111 TQ_INT32 depth = src->colorSpace()->nColorChannels();
112 return new KisWavelet(size, depth);
115inline uint KisMathToolbox::fastWaveletTotalSteps(
const TQRect& rect)
118 int maxrectsize = (rect.height() < rect.width()) ? rect.width() : rect.height();
120 for(size = 2; size < maxrectsize; size *= 2) steps += size / 2; ;
Base class for registry objects in Chalk.