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

#include <colorsfilters.h>

+ Inheritance diagram for KisAutoContrast:

Public Member Functions

 KisAutoContrast ()
 
void processImpl (KisPaintDeviceSP device, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const override
 
- Public Member Functions inherited from KisFilter
virtual QRect changedRect (const QRect &rect, const KisFilterConfigurationSP config, int lod) const
 
virtual bool configurationAllowedForMask (KisFilterConfigurationSP config) const
 
virtual void fixLoadedFilterConfigurationForMasks (KisFilterConfigurationSP config) const
 
 KisFilter (const KoID &id, const KoID &category, const QString &entry)
 
virtual QRect neededRect (const QRect &rect, const KisFilterConfigurationSP config, int lod) const
 
virtual bool needsTransparentPixels (const KisFilterConfigurationSP config, const KoColorSpace *cs) const
 
void process (const KisPaintDeviceSP src, KisPaintDeviceSP dst, KisSelectionSP selection, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const
 
void process (KisPaintDeviceSP device, const QRect &applyRect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater=0) const
 
virtual bool supportsLevelOfDetail (const KisFilterConfigurationSP config, int lod) const
 
 ~KisFilter () override
 
- Public Member Functions inherited from KisBaseProcessor
KisBookmarkedConfigurationManagerbookmarkManager ()
 
const KisBookmarkedConfigurationManagerbookmarkManager () const
 
ColorSpaceIndependence colorSpaceIndependence () const
 
virtual KisConfigWidgetcreateConfigurationWidget (QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const
 
virtual KisFilterConfigurationSP defaultConfiguration (KisResourcesInterfaceSP resourcesInterface) const
 
virtual KisFilterConfigurationSP factoryConfiguration (KisResourcesInterfaceSP resourcesInterface) const
 
QString id () const
 
 KisBaseProcessor (const KoID &id, const KoID &category, const QString &entry)
 
KoID menuCategory () const
 
QString menuEntry () const
 
QString name () const
 
 Private ()
 
QKeySequence shortcut () const
 
bool showConfigurationWidget ()
 If true, the filter wants to show a configuration widget.
 
bool supportsAdjustmentLayers () const
 This filter can be used in adjustment layers.
 
bool supportsPainting () const
 
bool supportsThreading () const
 
virtual ~KisBaseProcessor ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 
- Public Member Functions inherited from KisShared
bool deref ()
 
bool ref ()
 
int refCount ()
 
QAtomicInt * sharedWeakReference ()
 

Static Public Member Functions

static KoID id ()
 

Additional Inherited Members

- Public Attributes inherited from KisBaseProcessor
KisBookmarkedConfigurationManagerbookmarkManager
 
KoID category
 
ColorSpaceIndependence colorSpaceIndependence
 
QString entry
 
KoID id
 
QKeySequence shortcut
 
bool showConfigurationWidget
 
bool supportsAdjustmentLayers
 
bool supportsPainting
 
bool supportsThreading
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 
- Protected Member Functions inherited from KisFilter
QString configEntryGroup () const
 
void setSupportsLevelOfDetail (bool value)
 
- Protected Member Functions inherited from KisBaseProcessor
void init (const QString &configEntryGroup)
 
void setColorSpaceIndependence (ColorSpaceIndependence v)
 
void setShortcut (const QKeySequence &shortcut)
 
void setShowConfigurationWidget (bool v)
 
void setSupportsAdjustmentLayers (bool v)
 
void setSupportsPainting (bool v)
 
void setSupportsThreading (bool v)
 
- Protected Member Functions inherited from KisShared
 KisShared ()
 
 ~KisShared ()
 

Detailed Description

Definition at line 25 of file colorsfilters.h.

Constructor & Destructor Documentation

◆ KisAutoContrast()

KisAutoContrast::KisAutoContrast ( )

Definition at line 77 of file colorsfilters.cpp.

77 : KisFilter(id(), FiltersCategoryAdjustId, i18n("&Auto Contrast"))
78{
84}
@ TO_LAB16
KisFilter(const KoID &id, const KoID &category, const QString &entry)
Definition kis_filter.cc:22
const KoID FiltersCategoryAdjustId("adjust_filters", ki18nc("The category of color adjustment filters, like levels. Verb.", "Adjust"))
void setSupportsThreading(bool v)
void setShowConfigurationWidget(bool v)
void setSupportsAdjustmentLayers(bool v)
void setSupportsPainting(bool v)
void setColorSpaceIndependence(ColorSpaceIndependence v)

References KisBaseProcessor::setColorSpaceIndependence(), KisBaseProcessor::setShowConfigurationWidget(), KisBaseProcessor::setSupportsAdjustmentLayers(), KisBaseProcessor::setSupportsPainting(), KisBaseProcessor::setSupportsThreading(), and TO_LAB16.

Member Function Documentation

◆ id()

static KoID KisAutoContrast::id ( )
inlinestatic

Definition at line 36 of file colorsfilters.h.

36 {
37 return KoID("autocontrast", i18n("Auto Contrast"));
38 }
Definition KoID.h:30

◆ processImpl()

void KisAutoContrast::processImpl ( KisPaintDeviceSP device,
const QRect & applyRect,
const KisFilterConfigurationSP config,
KoUpdater * progressUpdater ) const
overridevirtual

Override this function with the implementation of your filter.

This is a low level function that expects all the conditions for the

Parameters
devicebe met. Use usual process() methods instead.
devicethe paint device to filter
applyRectthe rectangle where the filter is applied
configthe parameters of the filter
progressUpdaterto pass on the progress the filter is making

Implements KisFilter.

Definition at line 86 of file colorsfilters.cpp.

90{
91 Q_ASSERT(device != 0);
92 Q_UNUSED(config);
93 // initialize
95 KisHistogram histogram(device, applyRect, producer, LINEAR);
96 int minvalue = int(255 * histogram.calculations().getMin() + 0.5);
97 int maxvalue = int(255 * histogram.calculations().getMax() + 0.5);
98
99 if (maxvalue > 255)
100 maxvalue = 255;
101
102 histogram.setChannel(0);
103 int twoPercent = int(0.005 * histogram.calculations().getCount());
104 int pixCount = 0;
105 int binnum = 0;
106
107 while (binnum < histogram.producer()->numberOfBins()) {
108 pixCount += histogram.getValue(binnum);
109 if (pixCount > twoPercent) {
110 minvalue = binnum;
111 break;
112 }
113 binnum++;
114 }
115 pixCount = 0;
116 binnum = histogram.producer()->numberOfBins() - 1;
117 while (binnum > 0) {
118 pixCount += histogram.getValue(binnum);
119 if (pixCount > twoPercent) {
120 maxvalue = binnum;
121 break;
122 }
123 binnum--;
124 }
125 // build the transferfunction
126 int diff = maxvalue - minvalue;
127
128 QScopedArrayPointer<quint16> transfer(new quint16[256]);
129 for (int i = 0; i < 255; i++)
130 transfer[i] = 0xFFFF;
131
132 if (diff != 0) {
133 for (int i = 0; i < minvalue; i++)
134 transfer[i] = 0x0;
135 for (int i = minvalue; i < maxvalue; i++) {
136 qint32 val = int((0xFFFF * (i - minvalue)) / diff);
137 if (val > 0xFFFF)
138 val = 0xFFFF;
139 if (val < 0)
140 val = 0;
141
142 transfer[i] = val;
143 }
144 for (int i = maxvalue; i < 256; i++)
145 transfer[i] = 0xFFFF;
146 }
147 // apply
148 QScopedPointer<KoColorTransformation> adj(device->colorSpace()->createBrightnessContrastAdjustment(transfer.data()));
150
151 KisSequentialIteratorProgress it(device, applyRect, progressUpdater);
152
153 quint32 npix = it.nConseqPixels();
154 while(it.nextPixels(npix)) {
155
156 // adjust
157 npix = it.nConseqPixels();
158 adj->transform(it.oldRawData(), it.rawData(), npix);
159 }
160}
const KoColorSpace * colorSpace() const
virtual KoColorTransformation * createBrightnessContrastAdjustment(const quint16 *transferValues) const =0
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
@ LINEAR
Definition nugrid.h:26

References KisHistogram::calculations(), KisPaintDevice::colorSpace(), KoColorSpace::createBrightnessContrastAdjustment(), KisHistogram::Calculations::getCount(), KisHistogram::Calculations::getMax(), KisHistogram::Calculations::getMin(), KisHistogram::getValue(), KIS_SAFE_ASSERT_RECOVER_RETURN, LINEAR, KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nConseqPixels(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::nextPixels(), KoHistogramProducer::numberOfBins(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::oldRawData(), KisHistogram::producer(), KisSequentialIteratorBase< IteratorPolicy, SourcePolicy, ProgressPolicy >::rawData(), and KisHistogram::setChannel().


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