|
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2013 - Raw Material Software Ltd.
-
- Permission is granted to use this software under the terms of either:
- a) the GPL v2 (or any later version)
- b) the Affero GPL v3
-
- Details of these licenses can be found at: www.gnu.org/licenses
-
- JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- ------------------------------------------------------------------------------
-
- To release a closed-source product which uses JUCE, commercial licenses are
- available: visit www.juce.com for more information.
-
- ==============================================================================
- */
-
- #ifndef JUCE_IMAGECONVOLUTIONKERNEL_H_INCLUDED
- #define JUCE_IMAGECONVOLUTIONKERNEL_H_INCLUDED
-
-
- //==============================================================================
- /**
- Represents a filter kernel to use in convoluting an image.
-
- @see Image::applyConvolution
- */
- class JUCE_API ImageConvolutionKernel
- {
- public:
- //==============================================================================
- /** Creates an empty convulution kernel.
-
- @param size the length of each dimension of the kernel, so e.g. if the size
- is 5, it will create a 5x5 kernel
- */
- ImageConvolutionKernel (int size);
-
- /** Destructor. */
- ~ImageConvolutionKernel();
-
- //==============================================================================
- /** Resets all values in the kernel to zero. */
- void clear();
-
- /** Returns one of the kernel values. */
- float getKernelValue (int x, int y) const noexcept;
-
- /** Sets the value of a specific cell in the kernel.
-
- The x and y parameters must be in the range 0 < x < getKernelSize().
-
- @see setOverallSum
- */
- void setKernelValue (int x, int y, float value) noexcept;
-
- /** Rescales all values in the kernel to make the total add up to a fixed value.
-
- This will multiply all values in the kernel by (desiredTotalSum / currentTotalSum).
- */
- void setOverallSum (float desiredTotalSum);
-
- /** Multiplies all values in the kernel by a value. */
- void rescaleAllValues (float multiplier);
-
- /** Intialises the kernel for a gaussian blur.
-
- @param blurRadius this may be larger or smaller than the kernel's actual
- size but this will obviously be wasteful or clip at the
- edges. Ideally the kernel should be just larger than
- (blurRadius * 2).
- */
- void createGaussianBlur (float blurRadius);
-
- //==============================================================================
- /** Returns the size of the kernel.
-
- E.g. if it's a 3x3 kernel, this returns 3.
- */
- int getKernelSize() const { return size; }
-
- //==============================================================================
- /** Applies the kernel to an image.
-
- @param destImage the image that will receive the resultant convoluted pixels.
- @param sourceImage the source image to read from - this can be the same image as
- the destination, but if different, it must be exactly the same
- size and format.
- @param destinationArea the region of the image to apply the filter to
- */
- void applyToImage (Image& destImage,
- const Image& sourceImage,
- const Rectangle<int>& destinationArea) const;
-
- private:
- //==============================================================================
- HeapBlock <float> values;
- const int size;
-
- JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ImageConvolutionKernel)
- };
-
-
- #endif // JUCE_IMAGECONVOLUTIONKERNEL_H_INCLUDED
|