18 #ifndef PIC_IO_VOL_HPP 19 #define PIC_IO_VOL_HPP 24 #include "../base.hpp" 26 #include "../util/math.hpp" 41 int &height,
int &depth,
int &channels)
43 FILE *file = fopen(nameFile.c_str(),
"rb");
50 fseek(file, 0, SEEK_END);
51 int fileSize = ftell(file) / 3;
55 int c64 = 64 * 64 * 64;
56 int c128 = 128 * 128 * 128;
57 int c256 = 256 * 256 * 256;
59 if(fileSize != c64 && fileSize != c128 && fileSize != c256) {
64 len = fileSize == c64 ? 64 : 128;
65 len = fileSize == c128 ? 128 : len;
66 len = fileSize == c256 ? 256 : len;
73 data =
new float[len * len * len * 4];
76 unsigned char *tmpData =
new unsigned char[fileSize * 3];
78 fread(tmpData,
sizeof(
unsigned char), fileSize * 3, file);
82 for(
int i = 0; i < len; i++) {
83 int tmpI = len * len * i;
85 for(
int j = 0; j < len; j++) {
86 int tmpJ = tmpI + len * j;
88 for(
int k = 0; k < len; k++) {
89 ind0 = (tmpJ + k) * 3;
90 ind1 = (tmpJ + k) * channels;
91 data[ind1 ] = float(tmpData[ind0 ]) / 255.0f;
92 data[ind1 + 1] = float(tmpData[ind0 + 1]) / 255.0f;
93 data[ind1 + 2] = float(tmpData[ind0 + 2]) / 255.0f;
94 data[ind1 + 3] = sqrtf(data[ind1 ] * data[ind1 ] +
95 data[ind1 + 1] * data[ind1 + 1] +
96 data[ind1 + 2] * data[ind1 + 2]);
120 int depth,
int channels = 3)
123 FILE *file = fopen(nameFile.c_str(),
"wb");
129 int tot = width * height * depth * 3;
131 unsigned char *tmpData =
new unsigned char[tot];
146 for(
int i = 0; i < tot; i += 3) {
147 int j = (i / 3) * channels;
148 tmpData[i ] = int(
CLAMPi(data[j ] * 255.0f, 0.0f, 255.0f));
149 tmpData[i + 1] = int(
CLAMPi(data[j + sh1] * 255.0f, 0.0f, 255.0f));
150 tmpData[i + 2] = int(
CLAMPi(data[j + sh2] * 255.0f, 0.0f, 255.0f));
153 fwrite(tmpData,
sizeof(
unsigned char), tot, file);
PIC_INLINE bool WriteVOL(std::string nameFile, float *data, int width, int height, int depth, int channels=3)
WriteVOL.
Definition: vol.hpp:119
#define PIC_INLINE
Definition: base.hpp:33
#define CLAMPi(x, a, b)
Definition: math.hpp:81
Definition: bilateral_separation.hpp:25
PIC_INLINE float * ReadVOL(std::string nameFile, float *data, int &width, int &height, int &depth, int &channels)
ReadVOL.
Definition: vol.hpp:40