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

#include <kis_selection_filters.h>

+ Inheritance diagram for KisFeatherSelectionFilter:

Public Member Functions

QRect changeRect (const QRect &rect, KisDefaultBoundsBaseSP defaultBounds) override
 
 KisFeatherSelectionFilter (qint32 radius)
 
KUndo2MagicString name () override
 
void process (KisPixelSelectionSP pixelSelection, const QRect &rect) override
 
- Public Member Functions inherited from KisSelectionFilter
virtual ~KisSelectionFilter ()
 

Private Attributes

qint32 m_radius
 

Additional Inherited Members

- Protected Member Functions inherited from KisSelectionFilter
void computeBorder (qint32 *circ, qint32 xradius, qint32 yradius)
 
void computeTransition (quint8 *transition, quint8 **buf, qint32 width)
 
void rotatePointers (quint8 **p, quint32 n)
 

Detailed Description

Definition at line 77 of file kis_selection_filters.h.

Constructor & Destructor Documentation

◆ KisFeatherSelectionFilter()

KisFeatherSelectionFilter::KisFeatherSelectionFilter ( qint32 radius)

Definition at line 492 of file kis_selection_filters.cpp.

493 : m_radius(radius)
494{
495}

Member Function Documentation

◆ changeRect()

QRect KisFeatherSelectionFilter::changeRect ( const QRect & rect,
KisDefaultBoundsBaseSP defaultBounds )
overridevirtual

Reimplemented from KisSelectionFilter.

Definition at line 502 of file kis_selection_filters.cpp.

503{
504 Q_UNUSED(defaultBounds);
505
506 return rect.adjusted(-m_radius, -m_radius,
508}

References m_radius.

◆ name()

KUndo2MagicString KisFeatherSelectionFilter::name ( )
overridevirtual

Reimplemented from KisSelectionFilter.

Definition at line 497 of file kis_selection_filters.cpp.

498{
499 return kundo2_i18n("Feather Selection");
500}
KUndo2MagicString kundo2_i18n(const char *text)

References kundo2_i18n().

◆ process()

void KisFeatherSelectionFilter::process ( KisPixelSelectionSP pixelSelection,
const QRect & rect )
overridevirtual

Implements KisSelectionFilter.

Definition at line 510 of file kis_selection_filters.cpp.

511{
512 // compute horizontal kernel
513 const uint kernelSize = m_radius * 2 + 1;
514 Eigen::Matrix<qreal, Eigen::Dynamic, Eigen::Dynamic> gaussianMatrix(1, kernelSize);
515
516 const qreal multiplicand = 1.0 / (2.0 * M_PI * m_radius * m_radius);
517 const qreal exponentMultiplicand = 1.0 / (2.0 * m_radius * m_radius);
518
519 for (uint x = 0; x < kernelSize; x++) {
520 uint xDistance = qAbs((int)m_radius - (int)x);
521 gaussianMatrix(0, x) = multiplicand * exp( -(qreal)((xDistance * xDistance) + (m_radius * m_radius)) * exponentMultiplicand );
522 }
523
524 KisConvolutionKernelSP kernelHoriz = KisConvolutionKernel::fromMatrix(gaussianMatrix, 0, gaussianMatrix.sum());
525 KisConvolutionKernelSP kernelVertical = KisConvolutionKernel::fromMatrix(gaussianMatrix.transpose(), 0, gaussianMatrix.sum());
526
527 KisPaintDeviceSP interm = new KisPaintDevice(pixelSelection->colorSpace());
528 interm->prepareClone(pixelSelection);
529
530 KisConvolutionPainter horizPainter(interm);
531 horizPainter.setChannelFlags(interm->colorSpace()->channelFlags(false, true));
532 horizPainter.applyMatrix(kernelHoriz, pixelSelection, rect.topLeft(), rect.topLeft(), rect.size(), BORDER_REPEAT);
533 horizPainter.end();
534
535 KisConvolutionPainter verticalPainter(pixelSelection);
536 verticalPainter.setChannelFlags(pixelSelection->colorSpace()->channelFlags(false, true));
537 verticalPainter.applyMatrix(kernelVertical, interm, rect.topLeft(), rect.topLeft(), rect.size(), BORDER_REPEAT);
538 verticalPainter.end();
539}
unsigned int uint
The KisConvolutionPainter class applies a convolution kernel to a paint device.
const KoColorSpace * colorSpace() const
void prepareClone(KisPaintDeviceSP src)
QBitArray channelFlags(bool color=true, bool alpha=false) const
#define M_PI
Definition kis_global.h:111
static KisConvolutionKernelSP fromMatrix(Eigen::Matrix< qreal, Eigen::Dynamic, Eigen::Dynamic > matrix, qreal offset, qreal factor)

References KisConvolutionPainter::applyMatrix(), BORDER_REPEAT, KoColorSpace::channelFlags(), KisPaintDevice::colorSpace(), KisPainter::end(), KisConvolutionKernel::fromMatrix(), M_PI, m_radius, KisPaintDevice::prepareClone(), and KisPainter::setChannelFlags().

Member Data Documentation

◆ m_radius

qint32 KisFeatherSelectionFilter::m_radius
private

Definition at line 88 of file kis_selection_filters.h.


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