/* * libopenraw - bitmapdata.cpp * * Copyright (C) 2007-2017 Hubert Figuière * * This library is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ #include #include #include #include #include #include #include "trace.hpp" #include "bitmapdata.hpp" using namespace Debug; namespace OpenRaw { class BitmapData::Private { public: /** raw data */ void *data; /** size in bytes of raw data */ size_t data_size; /** type of thumbnail data */ DataType data_type; /** width dimension in pixels of image data */ uint32_t width; /** height dimension in pixels of image data */ uint32_t height; /** bpc bit per channel. 0 is not a valid value */ uint32_t bpc; /** region of interest */ uint32_t roi_x; uint32_t roi_y; uint32_t roi_w; uint32_t roi_h; Private() : data(nullptr) , data_size(0) , data_type(OR_DATA_TYPE_NONE) , width(0) , height(0) , bpc(0) , roi_x(0) , roi_y(0) , roi_w(0) , roi_h(0) { } ~Private() { if (data) { free(data); } } Private(const Private &) = delete; Private &operator=(const Private &) = delete; }; BitmapData::BitmapData() : d(new BitmapData::Private()) { } BitmapData::~BitmapData() { delete d; } void BitmapData::swap(BitmapData &with) { std::swap(this->d, with.d); } BitmapData::DataType BitmapData::dataType() const { return d->data_type; } void BitmapData::setDataType(BitmapData::DataType _type) { d->data_type = _type; if (d->bpc == 0) { switch (_type) { case OR_DATA_TYPE_NONE: d->bpc = 0; break; case OR_DATA_TYPE_COMPRESSED_RAW: case OR_DATA_TYPE_RAW: d->bpc = 16; break; case OR_DATA_TYPE_PIXMAP_8RGB: case OR_DATA_TYPE_JPEG: default: d->bpc = 8; } } } void *BitmapData::allocData(const size_t s) { LOGDBG1("allocate s=%lu data =%p\n", s, d->data); d->data = calloc(s, 1); LOGDBG1(" data =%p\n", d->data); d->data_size = s; return d->data; } size_t BitmapData::size() const { return d->data_size; } void *BitmapData::data() const { return d->data; } uint32_t BitmapData::x() const { return d->width; } uint32_t BitmapData::width() const { return d->width; } uint32_t BitmapData::y() const { return d->height; } uint32_t BitmapData::height() const { return d->height; } uint32_t BitmapData::bpc() const { return d->bpc; } void BitmapData::setBpc(uint32_t _bpc) { d->bpc = _bpc; } void BitmapData::setDimensions(uint32_t _width, uint32_t _height) { d->width = _width; d->height = _height; if (d->roi_w == 0) { d->roi_w = _width; } if (d->roi_h == 0) { d->roi_h = _height; } } uint32_t BitmapData::roi_x() const { return d->roi_x; } uint32_t BitmapData::roi_y() const { return d->roi_y; } uint32_t BitmapData::roi_width() const { return d->roi_w; } uint32_t BitmapData::roi_height() const { return d->roi_h; } void BitmapData::setRoi(uint32_t _x, uint32_t _y, uint32_t w, uint32_t h) { d->roi_x = _x; d->roi_y = _y; d->roi_w = w; d->roi_h = h; } }