/* * Copyright (C) 2021 Christopher J. Howard * * This file is part of Antkeeper source code. * * Antkeeper source code is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Antkeeper source code is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Antkeeper source code. If not, see . */ #include "image.hpp" image::image(): hdr(false), width(0), height(0), channels(4), pixels(nullptr), size(0) {} image::~image() { free_pixels(); } void image::format(unsigned int channels, bool hdr) { if (this->channels == channels && this->hdr == hdr) { return; } free_pixels(); this->channels = channels; this->hdr = hdr; allocate_pixels(); } void image::resize(unsigned int width, unsigned int height) { if (this->width == width && this->height == height) { return; } free_pixels(); this->width = width; this->height = height; allocate_pixels(); } void image::allocate_pixels() { size = width * height * channels; if (size != 0) { if (hdr) { pixels = new float[size]; } else { pixels = new unsigned char[size]; } } } void image::free_pixels() { if (pixels != nullptr) { if (hdr) { delete[] reinterpret_cast(pixels); } else { delete[] reinterpret_cast(pixels); } pixels = nullptr; size = 0; } }