Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_minmax_filters.cpp
Go to the documentation of this file.
1/*
2 * This file is part of Krita
3 *
4 * SPDX-FileCopyrightText: 2006 Cyrille Berger <cberger@cberger.net>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
10#include <KoUpdater.h>
11#include <KoChannelInfo.h>
14#include <kis_selection.h>
15#include <kis_paint_device.h>
18
19
20typedef void (*funcMaxMin)(const quint8* , quint8* , uint);
21
22template<typename _TYPE>
23void maximize(const quint8* s, quint8* d, uint nbpixels)
24{
25 const _TYPE* sT = reinterpret_cast<const _TYPE*>(s);
26 _TYPE* dT = reinterpret_cast<_TYPE*>(d);
27 _TYPE vmax = *sT;
28 for (uint i = 1; i < nbpixels; i ++) {
29 if (sT[i] > vmax) {
30 vmax = sT[i];
31 }
32 }
33 for (uint i = 0; i < nbpixels; i ++) {
34 if (dT[i] != vmax) {
35 dT[i] = 0;
36 }
37 }
38}
39
40template<typename _TYPE>
41void minimize(const quint8* s, quint8* d, uint nbpixels)
42{
43 const _TYPE* sT = reinterpret_cast<const _TYPE*>(s);
44 _TYPE* dT = reinterpret_cast<_TYPE*>(d);
45 _TYPE vmin = *sT;
46 for (uint i = 1; i < nbpixels; i ++) {
47 if (sT[i] < vmin) {
48 vmin = sT[i];
49 }
50 }
51 for (uint i = 0; i < nbpixels; i ++) {
52 if (dT[i] != vmin) {
53 dT[i] = 0;
54 }
55 }
56}
57
65
67 const QRect& rect,
68 const KisFilterConfigurationSP config,
69 KoUpdater* progressUpdater
70 ) const
71{
72 Q_UNUSED(config);
73 Q_ASSERT(device != 0);
74
75 const KoColorSpace * cs = device->colorSpace();
76 qint32 nC = cs->colorChannelCount();
77
78 funcMaxMin F;
79 KoChannelInfo::enumChannelValueType cT = cs->channels()[0]->channelValueType();
80 if (cT == KoChannelInfo::UINT8 || cT == KoChannelInfo::INT8) {
81 F = & maximize<quint8>;
82 } else if (cT == KoChannelInfo::UINT16 || cT == KoChannelInfo::INT16) {
83 F = & maximize<quint16>;
84 } else if (cT == KoChannelInfo::FLOAT32) {
85 F = & maximize<float>;
86 } else {
87 return;
88 }
89
90 KisSequentialIteratorProgress it(device, rect, progressUpdater);
91 while (it.nextPixel()) {
92 F(it.oldRawData(), it.rawData(), nC);
93 }
94}
95
102
104 const QRect& rect,
105 const KisFilterConfigurationSP config,
106 KoUpdater* progressUpdater
107 ) const
108{
109 Q_UNUSED(config);
110 Q_ASSERT(device != 0);
111
112 const KoColorSpace * cs = device->colorSpace();
113 qint32 nC = cs->colorChannelCount();
114
115 funcMaxMin F;
116 KoChannelInfo::enumChannelValueType cT = cs->channels()[0]->channelValueType();
117 if (cT == KoChannelInfo::UINT8 || cT == KoChannelInfo::INT8) {
118 F = & minimize<quint8>;
119 } else if (cT == KoChannelInfo::UINT16 || cT == KoChannelInfo::INT16) {
120 F = & minimize<quint16>;
121 } else if (cT == KoChannelInfo::FLOAT32) {
122 F = & minimize<float>;
123 } else {
124 return;
125 }
126
127 KisSequentialIteratorProgress it(device, rect, progressUpdater);
128 while (it.nextPixel()) {
129 F(it.oldRawData(), it.rawData(), nC);
130 }
131}
132
@ FULLY_INDEPENDENT
unsigned int uint
void processImpl(KisPaintDeviceSP src, const QRect &size, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const override
void processImpl(KisPaintDeviceSP device, const QRect &rect, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const override
void setSupportsLevelOfDetail(bool value)
const KoColorSpace * colorSpace() const
ALWAYS_INLINE quint8 * rawData()
ALWAYS_INLINE const quint8 * oldRawData() const
enumChannelValueType
enum to define the value of the channel
@ UINT8
use this for an unsigned integer 8bits channel
@ UINT16
use this for an integer 16bits channel
@ INT16
use this for an integer 16bits channel
@ INT8
use this for an integer 8bits channel
@ FLOAT32
use this for a float 32bits channel
QList< KoChannelInfo * > channels
virtual quint32 colorChannelCount() const =0
const KoID FiltersCategoryColorId("color_filters", ki18nc("The category of color transfer filters, like color to alpha. Noun.", "Colors"))
void(* funcMaxMin)(const quint8 *, quint8 *, uint)
void maximize(const quint8 *s, quint8 *d, uint nbpixels)
void minimize(const quint8 *s, quint8 *d, uint nbpixels)
typedef void(QOPENGLF_APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer)
void setShowConfigurationWidget(bool v)
void setSupportsPainting(bool v)
void setColorSpaceIndependence(ColorSpaceIndependence v)