digiKam
Digikam::DColorComposer Class Referenceabstract
+ Inheritance diagram for Digikam::DColorComposer:

Public Types

enum  CompositingOperation {
  PorterDuffNone , PorterDuffClear , PorterDuffSrc , PorterDuffSrcOver ,
  PorterDuffDstOver , PorterDuffSrcIn , PorterDuffDstIn , PorterDuffSrcOut ,
  PorterDuffDstOut , PorterDuffSrcAtop , PorterDuffDstAtop , PorterDuffXor
}
 
enum  MultiplicationFlags {
  NoMultiplication = 0x00 , PremultiplySrc = 0x01 , PremultiplyDst = 0x02 , DemultiplyDst = 0x04 ,
  MultiplicationFlagsDImg = PremultiplySrc | PremultiplyDst | DemultiplyDst , MultiplicationFlagsPremultipliedColorOnDImg = PremultiplyDst | DemultiplyDst
}
 

Public Member Functions

virtual void compose (DColor &dest, DColor &src)=0
 
virtual void compose (DColor &dest, DColor &src, MultiplicationFlags multiplicationFlags)
 
 DColorComposer ()=default
 
virtual ~DColorComposer ()=default
 

Static Public Member Functions

static DColorComposergetComposer (CompositingOperation rule)
 

Member Enumeration Documentation

◆ CompositingOperation

The available rules to combine src and destination color.

For the Porter-Duff rules, the formula is component = (source * fs + destination * fd) where fs, fd according to the following table with sa = source alpha, da = destination alpha:

None fs: sa fd: 1.0-sa Clear fs: 0.0 fd: 0.0 Src fs: 1.0 fd: 0.0 Src Over fs: 1.0 fd: 1.0-sa Dst Over fs: 1.0-da fd: 1.0 Src In fs: da fd: 0.0 Dst In fs: 0.0 fd: sa Src Out fs: 1.0-da fd: 0.0 Dst Out fs: 0.0 fd: 1.0-sa

Src Atop fs: da fd: 1.0-sa Dst Atop fs: 1.0-da fd: sa Xor fs: 1.0-da fd: 1.0-sa

None is the default, classical blending mode, a "Src over" simplification: Blend non-premultiplied RGBA data "src over" a fully opaque background. Src is the painter's algorithm. All other operations require premultiplied colors. The documentation of java.awt.AlphaComposite (Java 1.5) provides a good introduction and documentation on Porter Duff.

Enumerator
PorterDuffNone 
PorterDuffClear 
PorterDuffSrc 
PorterDuffSrcOver 
PorterDuffDstOver 
PorterDuffSrcIn 
PorterDuffDstIn 
PorterDuffSrcOut 
PorterDuffDstOut 
PorterDuffSrcAtop 
PorterDuffDstAtop 
PorterDuffXor 

◆ MultiplicationFlags

Enumerator
NoMultiplication 
PremultiplySrc 
PremultiplyDst 
DemultiplyDst 
MultiplicationFlagsDImg 
MultiplicationFlagsPremultipliedColorOnDImg 

Constructor & Destructor Documentation

◆ DColorComposer()

Digikam::DColorComposer::DColorComposer ( )
default

◆ ~DColorComposer()

virtual Digikam::DColorComposer::~DColorComposer ( )
virtualdefault

Member Function Documentation

◆ compose() [1/2]

virtual void Digikam::DColorComposer::compose ( DColor dest,
DColor src 
)
pure virtual

Carry out the actual composition process. Src and Dest are composed and the result is written to dest. No pre-/demultiplication is done by this method, use the other overloaded methods, which call this method, if you need pre- or demultiplication (you need it if any of the colors are read from or written to a DImg).

If you just pass the object to a DImg method, you do not need to call this. Call this function if you want to compose two colors. Implement this function if you create a custom DColorComposer.

The bit depth of source and destination color must be identical.

Referenced by compose().

◆ compose() [2/2]

void Digikam::DColorComposer::compose ( DColor dest,
DColor src,
DColorComposer::MultiplicationFlags  multiplicationFlags 
)
virtual

Compose the two colors by calling compose(dest, src). Pre- and demultiplication operations are done as specified. For PorterDuff operations except PorterDuffNone, you need

  • PremultiplySrc if src is not premultiplied (read from a DImg)
  • PremultiplyDst if dst is not premultiplied (read from a DImg)
  • DemultiplyDst if dst will be written to non-premultiplied data (a DImg)

References compose(), Digikam::DColor::demultiply(), DemultiplyDst, Digikam::DColor::premultiply(), PremultiplyDst, and PremultiplySrc.

◆ getComposer()

DColorComposer * Digikam::DColorComposer::getComposer ( DColorComposer::CompositingOperation  rule)
static

The documentation for this class was generated from the following files: