/*
* Copyright ( c ) 2006 Boudewijn Rempt < boud @ valdyas . org >
*
* 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 of the License , 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 .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*/
# ifndef KIS_STRATEGY_COLORSPACE_CMYK_U16_H_
# define KIS_STRATEGY_COLORSPACE_CMYK_U16_H_
# include <tqcolor.h>
# include <koffice_export.h>
# include "kis_global.h"
# include "kis_u16_base_colorspace.h"
# include "kis_integer_maths.h"
class KRITATOOL_EXPORT KisCmykU16ColorSpace : public KisU16BaseColorSpace {
public :
struct Pixel {
TQ_UINT16 cyan ;
TQ_UINT16 magenta ;
TQ_UINT16 yellow ;
TQ_UINT16 black ;
TQ_UINT16 alpha ;
} ;
public :
KisCmykU16ColorSpace ( KisColorSpaceFactoryRegistry * parent , KisProfile * p ) ;
virtual ~ KisCmykU16ColorSpace ( ) ;
virtual bool willDegrade ( ColorSpaceIndependence independence )
{
if ( independence = = TO_RGBA8 )
return true ;
else
return false ;
} ;
public :
virtual TQValueVector < KisChannelInfo * > channels ( ) const ;
virtual TQ_UINT32 nChannels ( ) const ;
virtual TQ_UINT32 nColorChannels ( ) const ;
virtual TQ_UINT32 pixelSize ( ) const ;
virtual void applyAdjustment ( const TQ_UINT8 * src , TQ_UINT8 * dst , KisColorAdjustment * adj , TQ_INT32 nPixels ) ;
virtual void mixColors ( const TQ_UINT8 * * colors , const TQ_UINT8 * weights , TQ_UINT32 nColors , TQ_UINT8 * dst ) const ;
virtual void invertColor ( TQ_UINT8 * src , TQ_INT32 nPixels ) ;
virtual void convolveColors ( TQ_UINT8 * * colors , TQ_INT32 * kernelValues , KisChannelInfo : : enumChannelFlags channelFlags , TQ_UINT8 * dst , TQ_INT32 factor , TQ_INT32 offset , TQ_INT32 nColors ) const ;
virtual void getSingleChannelPixel ( TQ_UINT8 * dstPixel , const TQ_UINT8 * srcPixel , TQ_UINT32 channelIndex ) ;
virtual KisCompositeOpList userVisiblecompositeOps ( ) const ;
protected :
virtual void bitBlt ( TQ_UINT8 * dst ,
TQ_INT32 dstRowStride ,
const TQ_UINT8 * src ,
TQ_INT32 srcRowStride ,
const TQ_UINT8 * srcAlphaMask ,
TQ_INT32 maskRowStride ,
TQ_UINT8 opacity ,
TQ_INT32 rows ,
TQ_INT32 cols ,
const KisCompositeOp & op ) ;
void compositeOver ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeMultiply ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeDivide ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeScreen ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeOverlay ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeDodge ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeBurn ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeDarken ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeLighten ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
void compositeErase ( TQ_UINT8 * dst , TQ_INT32 dstRowStride , const TQ_UINT8 * src , TQ_INT32 srcRowStride , const TQ_UINT8 * mask , TQ_INT32 maskRowStride , TQ_INT32 rows , TQ_INT32 columns , TQ_UINT16 opacity ) ;
private :
friend class KisCmykU16ColorSpaceTester ;
static const TQ_UINT8 PIXEL_CYAN = 0 ;
static const TQ_UINT8 PIXEL_MAGENTA = 1 ;
static const TQ_UINT8 PIXEL_YELLOW = 2 ;
static const TQ_UINT8 PIXEL_BLACK = 3 ;
static const TQ_UINT8 PIXEL_ALPHA = 4 ;
} ;
class KisCmykU16ColorSpaceFactory : public KisColorSpaceFactory
{
public :
/**
* Chalk definition for use in . kra files and internally : unchanging name +
* i18n ' able description .
*/
virtual KisID id ( ) const { return KisID ( " CMYKA16 " , i18n ( " CMYK (16-bit integer/channel) " ) ) ; } ;
/**
* lcms colorspace type definition .
*/
virtual TQ_UINT32 colorSpaceType ( ) { return TYPE_CMYK5_16 ; } ;
virtual icColorSpaceSignature colorSpaceSignature ( ) { return icSigCmykData ; } ;
virtual KisColorSpace * createColorSpace ( KisColorSpaceFactoryRegistry * parent , KisProfile * p ) { return new KisCmykU16ColorSpace ( parent , p ) ; } ;
virtual TQString defaultProfile ( ) { return " Offset printing, according to ISO/DIS 12647-2:2004, OFCOM, paper type 1 or 2 = coated art, 115 g/m2, screen ruling 60 cm-1, positive-acting plates " ; } ;
} ;
# endif // KIS_STRATEGY_COLORSPACE_CMYK_U16_H_