elene@3: #include elene@3: elene@3: #include "image.h" elene@3: elene@3: Image::Image() elene@3: { elene@3: pixels = 0; elene@3: width = 0; elene@3: height = 0; elene@3: } elene@3: elene@3: Image::~Image() elene@3: { elene@3: delete [] pixels; elene@3: } elene@3: elene@4: //copy constructor - assignment operator elene@4: Image::Image(const Image &img) elene@4: { elene@4: pixels = 0; elene@4: set_pixels(img.pixels, img.width, img.height); elene@4: } elene@4: elene@4: Image &Image::operator = (const Image &img) elene@4: { elene@4: if(&img != this) { elene@4: set_pixels(img.pixels, img.width, img.height); elene@4: } elene@4: return *this; elene@4: } elene@4: elene@4: //move constructor - move operator c++11 R-value reference to image elene@4: Image::Image(Image &&img) elene@4: { elene@4: pixels = img.pixels; elene@4: width = img.width; elene@4: height = img.height; elene@4: elene@4: img.pixels = 0; elene@4: img.width = 0; elene@4: img.height = 0; elene@4: } elene@4: elene@4: Image &Image::operator = (Image &&img) elene@4: { elene@4: if(&img != this) { elene@4: pixels = img.pixels; elene@4: width = img.width; elene@4: height = img.height; elene@4: elene@4: img.pixels = 0; elene@4: img.width = 0; elene@4: img.height = 0; elene@4: } elene@4: elene@4: return *this; elene@4: } elene@4: elene@3: bool Image::load(const char *fname) elene@3: { elene@3: int new_width, new_height; elene@3: float *new_pixels = (float*)img_load_pixels(fname, &new_width, &new_height, IMG_FMT_GREYF); elene@3: elene@3: if(!new_pixels) { elene@3: fprintf(stderr, "Failed to load image: %s\n", fname); elene@3: return false; elene@3: } elene@3: elene@3: set_pixels(new_pixels, new_width, new_height); elene@3: img_free_pixels(new_pixels); elene@3: return true; elene@3: } elene@3: elene@3: float *Image::get_pixels() elene@3: { elene@3: return pixels; elene@3: } elene@3: elene@3: const float *Image::get_pixels() const elene@3: { elene@3: return pixels; elene@3: } elene@3: elene@3: void Image::set_pixels(const float *pixels, int width, int height) elene@3: { elene@3: if(!pixels) elene@3: return; elene@3: elene@3: delete [] this->pixels; elene@3: elene@3: this->pixels = new float[width * height]; elene@3: for(int i=0; ipixels[i] = pixels[i]; elene@3: } elene@3: this->width = width; elene@3: this->height = height; elene@3: } elene@3: elene@3: int Image::get_width() const elene@3: { elene@3: return width; elene@3: } elene@3: elene@3: int Image::get_height() const elene@3: { elene@3: return height; elene@3: }