Krita Source Code Documentation
Loading...
Searching...
No Matches
KisContentLightLevelProcessingVistor Class Reference

The KisContentLightLevelProcessingVistor class This processing visitor checks the projection of the root level node, and calculates the Content Light Level Information for it. More...

#include <KisContentLightLevelProcessingVistor.h>

+ Inheritance diagram for KisContentLightLevelProcessingVistor:

Classes

struct  Private
 

Public Member Functions

KisRelativeContentLightLevelInformation contentLightLevelInformation () const
 
 KisContentLightLevelProcessingVistor (KisRelativeContentLightLevelInformation::CalculationType type=KisRelativeContentLightLevelInformation::XYZLuminance, const QRect &cropRect=QRect())
 
void visit (KisAdjustmentLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisCloneLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisColorizeMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisExternalLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisFilterMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisGeneratorLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisGroupLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisGroupLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisNode *node, KisUndoAdapter *undoAdapter) override
 
void visit (KisPaintLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisSelectionMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransformMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransparencyMask *mask, KisUndoAdapter *undoAdapter) override
 
 ~KisContentLightLevelProcessingVistor () override
 
- Public Member Functions inherited from KisDoNothingProcessingVisitor
void visit (KisAdjustmentLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisCloneLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisColorizeMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisExternalLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisFilterMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisGeneratorLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisGroupLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisNode *node, KisUndoAdapter *undoAdapter) override
 
void visit (KisPaintLayer *layer, KisUndoAdapter *undoAdapter) override
 
void visit (KisSelectionMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransformMask *mask, KisUndoAdapter *undoAdapter) override
 
void visit (KisTransparencyMask *mask, KisUndoAdapter *undoAdapter) override
 
 ~KisDoNothingProcessingVisitor () override
 
- Public Member Functions inherited from KisProcessingVisitor
virtual KUndo2CommandcreateInitCommand ()
 
virtual ~KisProcessingVisitor ()
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Private Member Functions

KisRelativeContentLightLevelInformation calculateForDev (KisPaintDeviceSP dev)
 

Private Attributes

QScopedPointer< Privated
 

Additional Inherited Members

- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

The KisContentLightLevelProcessingVistor class This processing visitor checks the projection of the root level node, and calculates the Content Light Level Information for it.

Definition at line 21 of file KisContentLightLevelProcessingVistor.h.

Constructor & Destructor Documentation

◆ KisContentLightLevelProcessingVistor()

KisContentLightLevelProcessingVistor::KisContentLightLevelProcessingVistor ( KisRelativeContentLightLevelInformation::CalculationType type = KisRelativeContentLightLevelInformation::XYZLuminance,
const QRect & cropRect = QRect() )

Definition at line 20 of file KisContentLightLevelProcessingVistor.cpp.

References d.

◆ ~KisContentLightLevelProcessingVistor()

KisContentLightLevelProcessingVistor::~KisContentLightLevelProcessingVistor ( )
override

Definition at line 27 of file KisContentLightLevelProcessingVistor.cpp.

28{
29
30}

Member Function Documentation

◆ calculateForDev()

KisRelativeContentLightLevelInformation KisContentLightLevelProcessingVistor::calculateForDev ( KisPaintDeviceSP dev)
private

xyzCS We need the luminance, so we could either do complex luminance calculations for each and every color space... Or we could convert to linear XYZ and only test the Y value.

Definition at line 55 of file KisContentLightLevelProcessingVistor.cpp.

56{
58 double average = 0.0;
59 int divider = 0;
60 const QRect imageBounds = d->cropRect.isValid()? d->cropRect: dev->exactBounds();
61
62 bool canConvertLinear = dev->colorSpace()->colorModelId() == RGBAColorModelID && dev->colorSpace()->profile()->getColorPrimaries() != PRIMARIES_UNSPECIFIED;
63
64 if ((d->type == KisRelativeContentLightLevelInformation::RGBComponent && canConvertLinear)
71 } else {
75 linP);
77 }
78 KisSequentialConstIterator srcIt(dev, imageBounds);
79
80 QVector<float> channels(dev->colorSpace()->channelCount());
81 while(srcIt.nextPixel()) {
82 const quint8* pixel = srcIt.rawDataConst();
83 dev->colorSpace()->normalisedChannelsValue(pixel, channels);
84
85 const double rgbMax = qMax(channels[0], qMax(channels[1], channels[2]));
86
87 average += rgbMax;
88 divider ++;
89 clli.maxContentLightLevel = qMax(clli.maxContentLightLevel, rgbMax);
90 }
91 } else {
100
101 KisSequentialConstIterator srcIt(dev, imageBounds);
102
103 while (srcIt.nextPixel()) {
104 const KoXyzF32Traits::Pixel* pixel = reinterpret_cast<const KoXyzF32Traits::Pixel*> (srcIt.rawDataConst());
105 clli.maxContentLightLevel = qMax(clli.maxContentLightLevel, double(pixel->y));
106 average += pixel->y;
107 divider ++;
108 }
109 }
110
111 clli.maxFrameAverageLightLevel = divider > 0? average / divider: 0;
112 return clli;
113}
const KoID Float32BitsColorDepthID("F32", ki18n("32-bit float/channel"))
const KoID XYZAColorModelID("XYZA", ki18n("XYZ/Alpha"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
@ PRIMARIES_UNSPECIFIED
QRect exactBounds() const
const KoColorSpace * colorSpace() const
void convertTo(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags(), KUndo2Command *parentCommand=nullptr, KoUpdater *progressUpdater=nullptr)
virtual KoID colorModelId() const =0
virtual quint32 channelCount() const =0
virtual void normalisedChannelsValue(const quint8 *pixel, QVector< float > &channels) const =0
virtual const KoColorProfile * profile() const =0
QString id() const
Definition KoID.cpp:63
@ Rec2020Component
Calculate luminance by converting to rec2020.
@ RGBComponent
Calculate luminance on the RGB components if possible.
double maxFrameAverageLightLevel
maxFrameAverage MaxFrameAverageLightLevel or MaxFALL is the average of average pixel brightnesses in ...
The KoColorProfileQuery struct.
virtual ColorPrimaries getColorPrimaries() const
getColorPrimaries
const KoColorSpace * colorSpace(const QString &colorModelId, const QString &colorDepthId, const KoColorProfile *profile)
static KoColorSpaceRegistry * instance()
const KoColorProfile * profileFor(const KoColorProfileQuery &query, const bool generate=true) const
profileFor tries to find the profile that matches these characteristics, if no such profile is found,...
const KoColorProfile * p2020G10Profile() const

References KoColorSpace::channelCount(), KoColorSpace::colorModelId(), KisPaintDevice::colorSpace(), KoColorSpaceRegistry::colorSpace(), KisPaintDevice::convertTo(), d, KisPaintDevice::exactBounds(), Float32BitsColorDepthID, KoColorProfile::getColorPrimaries(), KoID::id(), KoColorSpaceRegistry::instance(), KoColorConversionTransformation::IntentRelativeColorimetric, KisRelativeContentLightLevelInformation::maxContentLightLevel, KisRelativeContentLightLevelInformation::maxFrameAverageLightLevel, KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixel(), KoColorSpace::normalisedChannelsValue(), KoColorSpaceRegistry::p2020G10Profile(), PRIMARIES_UNSPECIFIED, KoColorSpace::profile(), KoColorSpaceRegistry::profileFor(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawDataConst(), KisRelativeContentLightLevelInformation::Rec2020Component, RGBAColorModelID, KisRelativeContentLightLevelInformation::RGBComponent, TRC_LINEAR, and XYZAColorModelID.

◆ contentLightLevelInformation()

KisRelativeContentLightLevelInformation KisContentLightLevelProcessingVistor::contentLightLevelInformation ( ) const

◆ visit() [1/13]

void KisDoNothingProcessingVisitor::visit ( KisAdjustmentLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 21 of file kis_do_nothing_processing_visitor.cpp.

53{
54 Q_UNUSED(layer);
55 Q_UNUSED(undoAdapter);
56}

◆ visit() [2/13]

void KisDoNothingProcessingVisitor::visit ( KisCloneLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 24 of file kis_do_nothing_processing_visitor.cpp.

29{
30 Q_UNUSED(layer);
31 Q_UNUSED(undoAdapter);
32}

◆ visit() [3/13]

void KisDoNothingProcessingVisitor::visit ( KisColorizeMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 29 of file kis_do_nothing_processing_visitor.cpp.

89{
90 Q_UNUSED(mask);
91 Q_UNUSED(undoAdapter);
92}

◆ visit() [4/13]

void KisDoNothingProcessingVisitor::visit ( KisExternalLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 22 of file kis_do_nothing_processing_visitor.cpp.

35{
36 Q_UNUSED(layer);
37 Q_UNUSED(undoAdapter);
38}

◆ visit() [5/13]

void KisDoNothingProcessingVisitor::visit ( KisFilterMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 25 of file kis_do_nothing_processing_visitor.cpp.

65{
66 Q_UNUSED(mask);
67 Q_UNUSED(undoAdapter);
68}

◆ visit() [6/13]

void KisDoNothingProcessingVisitor::visit ( KisGeneratorLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 23 of file kis_do_nothing_processing_visitor.cpp.

59{
60 Q_UNUSED(layer);
61 Q_UNUSED(undoAdapter);
62}

◆ visit() [7/13]

void KisDoNothingProcessingVisitor::visit ( KisGroupLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 20 of file kis_do_nothing_processing_visitor.cpp.

47{
48 Q_UNUSED(layer);
49 Q_UNUSED(undoAdapter);
50}

◆ visit() [8/13]

void KisContentLightLevelProcessingVistor::visit ( KisGroupLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 32 of file KisContentLightLevelProcessingVistor.cpp.

33{
34 Q_UNUSED(undoAdapter)
35
36 KisPaintDeviceSP projection = layer->projection();
37 KisPaintDeviceSP dev = new KisPaintDevice(layer->colorSpace());
38 dev->makeCloneFrom(projection, projection->extent());
39 d->clli.append(calculateForDev(dev));
40}
KisRelativeContentLightLevelInformation calculateForDev(KisPaintDeviceSP dev)
QRect extent() const
void makeCloneFrom(KisPaintDeviceSP src, const QRect &rect)
const KoColorSpace * colorSpace() const override
KisPaintDeviceSP projection() const override
Definition kis_layer.cc:826

References calculateForDev(), KisGroupLayer::colorSpace(), d, KisPaintDevice::extent(), KisPaintDevice::makeCloneFrom(), and KisLayer::projection().

◆ visit() [9/13]

void KisDoNothingProcessingVisitor::visit ( KisNode * node,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 18 of file kis_do_nothing_processing_visitor.cpp.

23{
24 Q_UNUSED(node);
25 Q_UNUSED(undoAdapter);
26}

◆ visit() [10/13]

void KisDoNothingProcessingVisitor::visit ( KisPaintLayer * layer,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 19 of file kis_do_nothing_processing_visitor.cpp.

41{
42 Q_UNUSED(layer);
43 Q_UNUSED(undoAdapter);
44}

◆ visit() [11/13]

void KisDoNothingProcessingVisitor::visit ( KisSelectionMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 28 of file kis_do_nothing_processing_visitor.cpp.

83{
84 Q_UNUSED(mask);
85 Q_UNUSED(undoAdapter);
86}

◆ visit() [12/13]

void KisDoNothingProcessingVisitor::visit ( KisTransformMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 26 of file kis_do_nothing_processing_visitor.cpp.

71{
72 Q_UNUSED(mask);
73 Q_UNUSED(undoAdapter);
74}

◆ visit() [13/13]

void KisDoNothingProcessingVisitor::visit ( KisTransparencyMask * mask,
KisUndoAdapter * undoAdapter )
overridevirtual

Implements KisProcessingVisitor.

Definition at line 27 of file kis_do_nothing_processing_visitor.cpp.

77{
78 Q_UNUSED(mask);
79 Q_UNUSED(undoAdapter);
80}

Member Data Documentation

◆ d

QScopedPointer<Private> KisContentLightLevelProcessingVistor::d
private

Definition at line 36 of file KisContentLightLevelProcessingVistor.h.


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