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