nuclear@2: #include nuclear@2: #include "imago2.h" nuclear@2: #include "image.h" nuclear@2: nuclear@2: Image::Image() nuclear@2: { nuclear@2: pixels = 0; nuclear@2: own_pixels = true; nuclear@2: width = height = 0; nuclear@2: } nuclear@2: nuclear@2: Image::~Image() nuclear@2: { nuclear@2: destroy(); nuclear@2: } nuclear@2: nuclear@2: Image::Image(const Image &img) nuclear@2: { nuclear@2: pixels = 0; nuclear@2: own_pixels = false; nuclear@2: nuclear@2: create(img.width, img.height, img.pixels); nuclear@2: } nuclear@2: nuclear@2: Image &Image::operator =(const Image &img) nuclear@2: { nuclear@2: if(this != &img) { nuclear@2: destroy(); nuclear@2: create(img.width, img.height, img.pixels); nuclear@2: } nuclear@2: return *this; nuclear@2: } nuclear@2: nuclear@2: void Image::create(int xsz, int ysz, unsigned char *pixels) nuclear@2: { nuclear@2: destroy(); nuclear@2: nuclear@2: this->pixels = new unsigned char[xsz * ysz * 4]; nuclear@2: if(pixels) { nuclear@2: memcpy(this->pixels, pixels, xsz * ysz * 4); nuclear@2: } else { nuclear@2: memset(this->pixels, 0, xsz * ysz * 4); nuclear@2: } nuclear@2: width = xsz; nuclear@2: height = ysz; nuclear@2: own_pixels = true; nuclear@2: } nuclear@2: nuclear@2: void Image::destroy() nuclear@2: { nuclear@2: if(own_pixels) { nuclear@2: delete [] pixels; nuclear@2: } nuclear@2: pixels = 0; nuclear@2: width = height = 0; nuclear@2: own_pixels = true; nuclear@2: } nuclear@2: nuclear@2: int Image::get_width() const nuclear@2: { nuclear@2: return width; nuclear@2: } nuclear@2: nuclear@2: int Image::get_height() const nuclear@2: { nuclear@2: return height; nuclear@2: } nuclear@2: nuclear@2: void Image::set_pixels(int xsz, int ysz, unsigned char *pixels) nuclear@2: { nuclear@2: destroy(); nuclear@2: nuclear@2: this->pixels = pixels; nuclear@2: width = xsz; nuclear@2: height = ysz; nuclear@2: own_pixels = false; nuclear@2: } nuclear@2: nuclear@2: unsigned char *Image::get_pixels() const nuclear@2: { nuclear@2: return pixels; nuclear@2: } nuclear@2: nuclear@2: bool Image::load(const char *fname) nuclear@2: { nuclear@2: int xsz, ysz; nuclear@2: unsigned char *pix = (unsigned char*)img_load_pixels(fname, &xsz, &ysz); nuclear@2: if(!pix) { nuclear@2: return false; nuclear@2: } nuclear@2: nuclear@2: create(xsz, ysz, pix); nuclear@2: return true; nuclear@2: }