18 #ifndef PIC_IO_PPM_HPP 19 #define PIC_IO_PPM_HPP 24 #include "../base.hpp" 38 int &width,
int &height,
int &channels)
40 std::ifstream ppm_in(nameFile.c_str(), std::ios::binary);
42 std::string magic_number(
" ");
44 ppm_in.get(magic_number[0]);
45 ppm_in.get(magic_number[1]);
49 if(magic_number != std::string(
"P6")) {
52 if(magic_number == std::string(
"P3")) {
54 ppm_in.open(nameFile.c_str(), std::ios::in);
55 ppm_in.get(magic_number[0]);
56 ppm_in.get(magic_number[1]);
62 unsigned tmpWidth, tmpHeight, bpp;
64 ppm_in >> tmpWidth >> tmpHeight >> bpp;
67 printf(
"ERROR ReadPPM: BPP\n");
75 data =
new unsigned char[tmpWidth * tmpHeight * channels];
84 for(
int y = 0; y < height; y++) {
87 for(
int x = 0; x < width; x++) {
88 int c = (ind + x) * 3;
96 data[c ] = (
static_cast<unsigned char>(r) * 255) / bpp;
97 data[c + 1] = (
static_cast<unsigned char>(g) * 255) / bpp;
98 data[c + 2] = (
static_cast<unsigned char>(b) * 255) / bpp;
105 data[c ] = (r * 255) / bpp;
106 data[c + 1] = (g * 255) / bpp;
107 data[c + 2] = (b * 255) / bpp;
127 int width,
int height,
int channels)
129 std::ofstream ppm_out(nameFile.c_str(), std::ios::binary);
131 if(!ppm_out.is_open()) {
154 for(
int y = 0; y < height; y++) {
157 for(
int x = 0; x < width; x++) {
158 int c = (ind + x) * channels;
160 ppm_out << data[c + shiftG];
161 ppm_out << data[c + shiftB];
#define PIC_INLINE
Definition: base.hpp:33
PIC_INLINE bool WritePPM(std::string nameFile, const unsigned char *data, int width, int height, int channels)
WritePPM writes an .ppm file.
Definition: ppm.hpp:126
Definition: bilateral_separation.hpp:25
PIC_INLINE unsigned char * ReadPPM(std::string nameFile, unsigned char *data, int &width, int &height, int &channels)
ReadPPM reads an .ppm file.
Definition: ppm.hpp:37