Files
rawTherapee/rtengine/cieimage.cc
Hombre 8b2eac9a3d Pipette and "On Preview Widgets" branch. See issue 227
The pipette part is already working quite nice but need to be finished. The widgets part needs more work...
2014-01-21 23:37:36 +01:00

100 lines
2.4 KiB
C++

#include "cieimage.h"
#include <memory.h>
namespace rtengine {
CieImage::CieImage (int w, int h) : fromImage(false), W(w), H(h) {
J_p = new float*[H];
Q_p = new float*[H];
M_p = new float*[H];
C_p = new float*[H];
sh_p = new float*[H];
// ch_p = new float*[H];
h_p = new float*[H];
// Initialize the pointers to zero
for (unsigned int c=0; c<6; ++c)
data[c] = NULL;
// Trying to allocate all in one block
data[0] = new (std::nothrow) float [W*H*6];
if (data[0]) {
float * index = data[0];
for (int i=0; i<H; i++)
J_p[i] = index + i*W;
index+=W*H;
for (int i=0; i<H; i++)
Q_p[i] = index + i*W;
index+=W*H;
for (int i=0; i<H; i++)
M_p[i] = index + i*W;
index+=W*H;
for (int i=0; i<H; i++)
C_p[i] = index + i*W;
index+=W*H;
for (int i=0; i<H; i++)
sh_p[i] = index + i*W;
index+=W*H;
// for (int i=0; i<H; i++)
// ch_p[i] = index + i*W;
// index+=W*H;
for (int i=0; i<H; i++)
h_p[i] = index + i*W;
}
else {
// Allocating each plane separately
for (unsigned int c=0; c<6; ++c)
data[c] = new float [W*H];
unsigned int c = 0;
for (int i=0; i<H; i++)
J_p[i] = data[c] + i*W;
++c;
for (int i=0; i<H; i++)
Q_p[i] = data[c] + i*W;
++c;
for (int i=0; i<H; i++)
M_p[i] = data[c] + i*W;
++c;
for (int i=0; i<H; i++)
C_p[i] = data[c] + i*W;
++c;
for (int i=0; i<H; i++)
sh_p[i] = data[c] + i*W;
++c;
// for (int i=0; i<H; i++)
// ch_p[i] = data[c] + i*W;
// ++c;
for (int i=0; i<H; i++)
h_p[i] = data[c] + i*W;
}
}
CieImage::~CieImage () {
if (!fromImage) {
delete [] J_p;
delete [] Q_p;
delete [] M_p;
delete [] C_p;
delete [] sh_p;
// delete [] ch_p;
delete [] h_p;
for (unsigned int c=0; c<6; ++c)
if (data[c]) delete [] data[c];
}
}
void CieImage::CopyFrom(CieImage *Img){
if (!data [1])
// Only one allocated block
memcpy(data, Img->data, W*H*6*sizeof(float));
else
// Separate allocation
for (unsigned int c=0; c<6; ++c)
memcpy(data[c], Img->data[c], W*H*sizeof(float));
}
}