FreeCAD/src/Mod/Image/App/ImageBase.h
2013-04-26 17:16:01 +02:00

83 lines
4.2 KiB
C++

/***************************************************************************
* *
* This is a class for holding and handling basic image data *
* *
* Author: Graeme van der Vlugt *
* Copyright: Imetric 3D GmbH *
* Year: 2004 *
* *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Library General Public License as *
* published by the Free Software Foundation; either version 2 of the *
* License, or (at your option) any later version. *
* for detail see the LICENCE text file. *
* *
***************************************************************************/
#ifndef IMAGEBASE_H
#define IMAGEBASE_H
namespace Image
{
#define IB_CF_GREY8 1 // 8-bit grey level images
#define IB_CF_GREY16 2 // 16-bit grey level images
#define IB_CF_GREY32 3 // 32-bit grey level images
#define IB_CF_RGB24 4 // 24-bit (8,8,8) RGB color images
#define IB_CF_RGB48 5 // 48-bit (16,16,16) RGB color images
#define IB_CF_BGR24 6 // 24-bit (8,8,8) BGR color images
#define IB_CF_BGR48 7 // 48-bit (16,16,16) BGR color images
#define IB_CF_RGBA32 8 // 32-bit (8,8,8,8) RGBA color images (A = alpha)
#define IB_CF_RGBA64 9 // 64-bit (16,16,16,16) RGBA color images (A = alpha)
#define IB_CF_BGRA32 10 // 32-bit (8,8,8,8) BGRA color images (A = alpha)
#define IB_CF_BGRA64 11 // 64-bit (16,16,16,16) BGRA color images (A = alpha)
class ImageExport ImageBase
{
public:
ImageBase();
virtual ~ImageBase();
ImageBase(const ImageBase &rhs);
ImageBase & operator=(const ImageBase &rhs);
bool hasValidData() const { return (_pPixelData != 0); }
void* getPixelDataPtr() { return (void *)_pPixelData; }
bool isOwner() const { return _owner; }
unsigned long getWidth() const { return _width; }
unsigned long getHeight() const { return _height; }
int getFormat() const { return _format; }
unsigned short getNumSigBitsPerSample() const { return _numSigBitsPerSample; }
unsigned short getNumSamples() const { return _numSamples; }
unsigned short getNumBitsPerSample() const { return _numBitsPerSample; }
unsigned short getNumBytesPerPixel() const { return _numBytesPerPixel; }
virtual void clear();
virtual int createCopy(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample);
virtual int pointTo(void* pSrcPixelData, unsigned long width, unsigned long height, int format, unsigned short numSigBitsPerSample, bool takeOwnership);
virtual int getSample(int x, int y, unsigned short sampleIndex, double &value);
protected:
int _setColorFormat(int format, unsigned short numSigBitsPerSample);
int _allocate();
unsigned char* _pPixelData; // pointer to the pixel data
bool _owner; // flag defining if the object owns the pixel data or not
unsigned long _width; // width of image (number of pixels in horizontal direction)
unsigned long _height; // height of image (number of pixels in vertical direction)
int _format; // colour format of the pixel data
unsigned short _numSigBitsPerSample;// number of significant bits per sample (always <= _numBitsPerSample)
// Dependent parameters
unsigned short _numSamples; // number of samples per pixel (e.g. 1 for grey, 3 for rgb, 4 for rgba)
unsigned short _numBitsPerSample; // number of bits per sample (e.g. 8 for Grey8)
unsigned short _numBytesPerPixel; // number of bytes per pixel (e.g. 1 for Grey8)
};
} // namespace ImageApp
#endif // IMAGEBASE_H