conworlds

diff src/image.cc @ 0:b326d53321f7

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 25 Apr 2014 05:20:53 +0300
parents
children 879194e4b1f0
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/image.cc	Fri Apr 25 05:20:53 2014 +0300
     1.3 @@ -0,0 +1,94 @@
     1.4 +#include <string.h>
     1.5 +#include "imago2.h"
     1.6 +#include "image.h"
     1.7 +
     1.8 +Image::Image()
     1.9 +{
    1.10 +	pixels = 0;
    1.11 +	own_pixels = true;
    1.12 +	width = height = 0;
    1.13 +}
    1.14 +
    1.15 +Image::~Image()
    1.16 +{
    1.17 +	destroy();
    1.18 +}
    1.19 +
    1.20 +Image::Image(const Image &img)
    1.21 +{
    1.22 +	pixels = 0;
    1.23 +	own_pixels = false;
    1.24 +
    1.25 +	create(img.width, img.height, img.pixels);
    1.26 +}
    1.27 +
    1.28 +Image &Image::operator =(const Image &img)
    1.29 +{
    1.30 +	if(this != &img) {
    1.31 +		destroy();
    1.32 +		create(img.width, img.height, img.pixels);
    1.33 +	}
    1.34 +	return *this;
    1.35 +}
    1.36 +
    1.37 +void Image::create(int xsz, int ysz, unsigned char *pixels)
    1.38 +{
    1.39 +	destroy();
    1.40 +
    1.41 +	this->pixels = new unsigned char[xsz * ysz * 4];
    1.42 +	if(pixels) {
    1.43 +		memcpy(this->pixels, pixels, xsz * ysz * 4);
    1.44 +	} else {
    1.45 +		memset(this->pixels, 0, xsz * ysz * 4);
    1.46 +	}
    1.47 +	width = xsz;
    1.48 +	height = ysz;
    1.49 +	own_pixels = true;
    1.50 +}
    1.51 +
    1.52 +void Image::destroy()
    1.53 +{
    1.54 +	if(own_pixels) {
    1.55 +		delete [] pixels;
    1.56 +	}
    1.57 +	pixels = 0;
    1.58 +	width = height = 0;
    1.59 +	own_pixels = true;
    1.60 +}
    1.61 +
    1.62 +int Image::get_width() const
    1.63 +{
    1.64 +	return width;
    1.65 +}
    1.66 +
    1.67 +int Image::get_height() const
    1.68 +{
    1.69 +	return height;
    1.70 +}
    1.71 +
    1.72 +void Image::set_pixels(int xsz, int ysz, unsigned char *pixels)
    1.73 +{
    1.74 +	destroy();
    1.75 +
    1.76 +	this->pixels = pixels;
    1.77 +	width = xsz;
    1.78 +	height = ysz;
    1.79 +	own_pixels = false;
    1.80 +}
    1.81 +
    1.82 +unsigned char *Image::get_pixels() const
    1.83 +{
    1.84 +	return pixels;
    1.85 +}
    1.86 +
    1.87 +bool Image::load(const char *fname)
    1.88 +{
    1.89 +	int xsz, ysz;
    1.90 +	unsigned char *pix = (unsigned char*)img_load_pixels(fname, &xsz, &ysz);
    1.91 +	if(!pix) {
    1.92 +		return false;
    1.93 +	}
    1.94 +
    1.95 +	create(xsz, ysz, pix);
    1.96 +	return true;
    1.97 +}
    1.98 \ No newline at end of file