krita
kis_f16half_base_colorspace.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef KIS_F16HALF_BASE_COLORSPACE_H_
00019 #define KIS_F16HALF_BASE_COLORSPACE_H_
00020
00021 #include <qcolor.h>
00022
00023 #include <half.h>
00024
00025 #include "kis_global.h"
00026 #include "kis_abstract_colorspace.h"
00027 #include "kis_integer_maths.h"
00028
00035 inline half UINT8_TO_HALF(uint c)
00036 {
00037 return static_cast<half>(c) / UINT8_MAX;
00038 }
00039
00040 inline uint HALF_TO_UINT8(half c)
00041 {
00042 return static_cast<uint>(CLAMP(static_cast<int>(c * static_cast<int>(UINT8_MAX) + 0.5),
00043 static_cast<int>(UINT8_MIN), static_cast<int>(UINT8_MAX)));
00044 }
00045
00046
00047 inline uint HALF_TO_UINT16(half c)
00048 {
00049 return static_cast<uint>(CLAMP(static_cast<int>(c * static_cast<int>(UINT16_MAX) + 0.5),
00050 static_cast<int>(UINT16_MIN), static_cast<int>(UINT16_MAX)));
00051 }
00052
00053 inline half HALF_BLEND(half a, half b, half alpha)
00054 {
00055 return (a - b) * alpha + b;
00056 }
00057
00058 #define F16HALF_OPACITY_OPAQUE ((half)1.0f)
00059 #define F16HALF_OPACITY_TRANSPARENT ((half)0.0f)
00060
00061 class KisF16HalfBaseColorSpace : public KisAbstractColorSpace {
00062
00063 public:
00064
00065 KisF16HalfBaseColorSpace(const KisID & id, DWORD cmType, icColorSpaceSignature colorSpaceSignature,
00066 KisColorSpaceFactoryRegistry * parent,
00067 KisProfile *p)
00068 : KisAbstractColorSpace(id, cmType, colorSpaceSignature, parent, p)
00069 {
00070 m_alphaSize = sizeof(half);
00071 };
00072
00073 virtual Q_UINT8 getAlpha(const Q_UINT8 * pixel) const;
00074 virtual void setAlpha(Q_UINT8 * pixels, Q_UINT8 alpha, Q_INT32 nPixels) const;
00075 virtual void multiplyAlpha(Q_UINT8 * pixels, Q_UINT8 alpha, Q_INT32 nPixels);
00076
00077 virtual void applyAlphaU8Mask(Q_UINT8 * pixels, Q_UINT8 * alpha, Q_INT32 nPixels);
00078 virtual void applyInverseAlphaU8Mask(Q_UINT8 * pixels, Q_UINT8 * alpha, Q_INT32 nPixels);
00079
00080 virtual QString channelValueText(const Q_UINT8 *pixel, Q_UINT32 channelIndex) const;
00081 virtual QString normalisedChannelValueText(const Q_UINT8 *pixel, Q_UINT32 channelIndex) const;
00082
00083 virtual Q_UINT8 scaleToU8(const Q_UINT8 * srcPixel, Q_INT32 channelPos);
00084 virtual Q_UINT16 scaleToU16(const Q_UINT8 * srcPixel, Q_INT32 channelPos);
00085
00086 virtual bool hasHighDynamicRange() const { return true; }
00087 };
00088
00089 #endif // KIS_F16HALF_BASE_COLORSPACE_H_
|