X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fimage.cc;fp=src%2Fimage.cc;h=2bfdbd868574bce2a9d1a6b13a74d773c5d4fefc;hb=77e44c5424bd5e6e7c6a706151fa786a56270e12;hp=0000000000000000000000000000000000000000;hpb=697231b0832d626b328fc9ae4a5a5ef9a003aa1a;p=demo diff --git a/src/image.cc b/src/image.cc new file mode 100644 index 0000000..2bfdbd8 --- /dev/null +++ b/src/image.cc @@ -0,0 +1,82 @@ +#include + +#include "imago2.h" +#include "image.h" + +Image::Image() +{ + w = h = 0; + pixels = 0; +} + +Image::~Image() +{ + delete [] pixels; +} + +Image::Image(const Image &image) +{ + w = image.w; + h = image.h; + + pixels = new unsigned char[w * h * 4]; + memcpy(pixels, image.pixels, w * h * 4); +} + +Image &Image::operator =(const Image &image) +{ + if(&image == this) + return *this; + + delete [] pixels; + + w = image.w; + h = image.h; + + pixels = new unsigned char[w * h * 4]; + memcpy(pixels, image.pixels, w * h * 4); + + return *this; +} + +Image::Image(Image &&image) +{ + w = image.w; + h = image.h; + + pixels = image.pixels; + image.pixels = 0; +} + +Image &Image::operator =(Image &&image) +{ + if(&image == this) + return *this; + + delete [] pixels; + + w = image.w; + h = image.h; + + pixels = image.pixels; + image.pixels = 0; + + return *this; +} + +bool Image::load(const char *fname) +{ + unsigned char *imago_pixels; + if(!(imago_pixels = (unsigned char *)img_load_pixels(fname, &w, &h))) { + fprintf(stderr, "Failed to load pixels from file: %s.\n", fname); + return false; + } + + delete [] pixels; + pixels = new unsigned char[w * h * 4]; + memcpy(pixels, imago_pixels, w * h * 4); + + img_free_pixels(imago_pixels); + + return true; +} \ No newline at end of file