diff options
Diffstat (limited to 'src/libs/dimg/dcolor.h')
-rw-r--r-- | src/libs/dimg/dcolor.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/src/libs/dimg/dcolor.h b/src/libs/dimg/dcolor.h new file mode 100644 index 00000000..16a34f55 --- /dev/null +++ b/src/libs/dimg/dcolor.h @@ -0,0 +1,152 @@ +/* ============================================================ + * + * This file is a part of digiKam project + * http://www.digikam.org + * + * Date : 2005-12-02 + * Description : 8-16 bits color container. + * + * Copyright (C) 2005-2007 by Gilles Caulier <caulier dot gilles at gmail dot com> + * + * This program 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 2, or (at your option) + * any later version. + * + * This program 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. + * + * ============================================================ */ + +#ifndef DCOLOR_H +#define DCOLOR_H + +// TQt includes. + +#include <tqcolor.h> + +// Local includes. + +#include "digikam_export.h" + +namespace Digikam +{ + +class DIGIKAM_EXPORT DColor +{ +public: + + /** Initialize with default value, fully transparent eight bit black */ + DColor() + : m_red(0), m_green(0), m_blue(0), m_alpha(0), m_sixteenBit(false) + {}; + + /** Read value from data. Equivalent to setColor() */ + DColor(const uchar *data, bool sixteenBit = false) + { setColor(data, sixteenBit); } + + /** Initialize with given RGBA values */ + DColor(int red, int green, int blue, int alpha, bool sixteenBit) + : m_red(red), m_green(green), m_blue(blue), m_alpha(alpha), m_sixteenBit(sixteenBit) + {}; + + /** Read values from TQColor, convert to sixteenBit of sixteenBit is true */ + DColor(const TQColor& color, bool sixteenBit=false); + + // Use default copy constructor, assignment operator and destructor + + /** Read color values as RGBA from the given memory location. + If sixteenBit is false, 4 bytes are read. + If sixteenBit is true, 8 bytes are read. + Inline method. + */ + void setColor(const uchar *data, bool sixteenBit = false); + + /** Write the values of this color to the given memory location. + If sixteenBit is false, 4 bytes are written. + If sixteenBit is true, 8 bytes are written. + Inline method. + */ + void setPixel(uchar *data) const; + + int red () const { return m_red; } + int green() const { return m_green; } + int blue () const { return m_blue; } + int alpha() const { return m_alpha; } + bool sixteenBit() const { return m_sixteenBit; } + + void setRed (int red) { m_red = red; } + void setGreen(int green) { m_green = green; } + void setBlue (int blue) { m_blue = blue; } + void setAlpha(int alpha) { m_alpha = alpha; } + void setSixteenBit(bool sixteenBit) { m_sixteenBit = sixteenBit; } + + TQColor getTQColor() const; + + /** Convert the color values of this color to and from sixteen bit + and set the sixteenBit value accordingly + */ + void convertToSixteenBit(); + void convertToEightBit(); + + /** Premultiply and demultiply this color. + DImg stores the color non-premultiplied. + Inline methods. + */ + void premultiply(); + void demultiply(); + + /** Return the current RGB color values of this color + in the HSL color space. + Alpha is ignored for the conversion. + */ + void getHSL(int* h, int* s, int* l) const; + + /** Set the RGB color values of this color + to the given HSL values converted to RGB. + Alpha is set to be fully opaque. + sixteenBit determines both how the HSL values are interpreted + and the sixteenBit value of this color after this operation. + */ + void setRGB(int h, int s, int l, bool sixteenBit); + +private: + + int m_red; + int m_green; + int m_blue; + int m_alpha; + + bool m_sixteenBit; + +public: + + // Inline alpha blending helper functions. + // These functions are used by DColorComposer. + // Look at that code to learn how to use them for + // composition if you want to use them in optimized code. + void blendZero(); + void blendAlpha8(int alpha); + void blendInvAlpha8(int alpha); + void blendAlpha16(int alpha); + void blendInvAlpha16(int alpha); + void premultiply16(int alpha); + void premultiply8(int alpha); + void demultiply16(int alpha); + void demultiply8(int alpha); + void blendAdd(const DColor &src); + void blendClamp8(); + void blendClamp16(); +}; + +} // NameSpace Digikam + + +// Inline methods +#include "dcolorpixelaccess.h" +#include "dcolorblend.h" + +#endif /* DCOLOR_H */ |