/* * This file is part of the KDE project * * Copyright (c) 2004 Cyrille Berger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include #include #include "convolutionfilters.h" #include "kis_custom_convolution_filter.h" KisKernelSP createKernel( TQ_INT32 i0, TQ_INT32 i1, TQ_INT32 i2, TQ_INT32 i3, TQ_INT32 i4, TQ_INT32 i5, TQ_INT32 i6, TQ_INT32 i7, TQ_INT32 i8, TQ_INT32 factor, TQ_INT32 offset ) { KisKernelSP kernel = new KisKernel(); kernel->width = 3; kernel->height = 3; kernel->factor = factor; kernel->offset = offset; kernel->data = new TQ_INT32[9]; kernel->data[0] = i0; kernel->data[1] = i1; kernel->data[2] = i2; kernel->data[3] = i3; kernel->data[4] = i4; kernel->data[5] = i5; kernel->data[6] = i6; kernel->data[7] = i7; kernel->data[8] = i8; return kernel; } typedef KGenericFactory ChalkConvolutionFiltersFactory; K_EXPORT_COMPONENT_FACTORY( chalkconvolutionfilters, ChalkConvolutionFiltersFactory( "chalk" ) ) ChalkConvolutionFilters::ChalkConvolutionFilters(TQObject *parent, const char *name, const TQStringList &) : KParts::Plugin(parent, name) { setInstance(ChalkConvolutionFiltersFactory::instance()); if (parent->inherits("KisFilterRegistry")) { KisFilterRegistry * manager = dynamic_cast(parent); manager->add(new KisGaussianBlurFilter()); manager->add(new KisSharpenFilter()); manager->add(new KisMeanRemovalFilter()); manager->add(new KisEmbossLaplascianFilter()); manager->add(new KisEmbossInAllDirectionsFilter()); manager->add(new KisEmbossHorizontalVerticalFilter()); manager->add(new KisEmbossVerticalFilter()); manager->add(new KisEmbossHorizontalFilter()); manager->add(new KisTopEdgeDetectionFilter()); manager->add(new KisRightEdgeDetectionFilter()); manager->add(new KisBottomEdgeDetectionFilter()); manager->add(new KisLeftEdgeDetectionFilter()); manager->add(new KisCustomConvolutionFilter()); } } ChalkConvolutionFilters::~ChalkConvolutionFilters() { } KisGaussianBlurFilter::KisGaussianBlurFilter() : KisConvolutionConstFilter(id(), "blur", i18n("&Gaussian Blur")) { m_matrix = createKernel( 1, 2, 1, 2, 4, 2, 1, 2, 1, 16, 0); } KisSharpenFilter::KisSharpenFilter() : KisConvolutionConstFilter(id(), "enhance", i18n("&Sharpen")) { m_matrix = createKernel( 0, -2, 0, -2, 11, -2, 0, -2, 0, 3, 0); } KisMeanRemovalFilter::KisMeanRemovalFilter() : KisConvolutionConstFilter(id(), "enhance", i18n("&Mean Removal")) { m_matrix = createKernel( -1, -1, -1, -1, 9, -1, -1, -1, -1, 1, 0); } KisEmbossLaplascianFilter::KisEmbossLaplascianFilter() : KisConvolutionConstFilter(id(), "emboss", i18n("Emboss Laplascian")) { m_matrix = createKernel( -1, 0, -1 , 0, 4, 0 , -1, 0, -1, 1, 127); m_channelFlags = KisChannelInfo::FLAG_COLOR; } KisEmbossInAllDirectionsFilter::KisEmbossInAllDirectionsFilter() : KisConvolutionConstFilter(id(), "emboss", i18n("Emboss in All Directions")) { m_matrix = createKernel( -1, -1, -1 , -1, 8, -1 , -1, -1, -1, 1, 127); m_channelFlags = KisChannelInfo::FLAG_COLOR; } KisEmbossHorizontalVerticalFilter::KisEmbossHorizontalVerticalFilter() : KisConvolutionConstFilter(id(), "emboss", i18n("Emboss Horizontal &&Qt::Vertical")) { m_matrix = createKernel( 0, -1, 0 , -1, 4, -1 , 0, -1, 0, 1, 127); m_channelFlags = KisChannelInfo::FLAG_COLOR; } KisEmbossVerticalFilter::KisEmbossVerticalFilter() : KisConvolutionConstFilter(id(), "emboss", i18n("Emboss Vertical Only")) { m_matrix = createKernel( 0, -1, 0 , 0, 2, 0 , 0, -1, 0, 1, 127); } KisEmbossHorizontalFilter::KisEmbossHorizontalFilter() : KisConvolutionConstFilter(id(), "emboss", i18n("Emboss Horizontal Only")) { m_matrix = createKernel( 0, 0, 0 , -1, 4, -1 , 0, 0, 0, 1, 127); } KisEmbossDiagonalFilter::KisEmbossDiagonalFilter() : KisConvolutionConstFilter(id(), "edge", i18n("Top Edge Detection")) { m_matrix = createKernel( -1, 0, -1 , 0, 4, 0 , -1, 0, -1, 1, 127); m_channelFlags = KisChannelInfo::FLAG_COLOR; } KisTopEdgeDetectionFilter::KisTopEdgeDetectionFilter() : KisConvolutionConstFilter(id(), "edge", i18n("Top Edge Detection")) { m_matrix = createKernel( 1, 1, 1 , 0, 0, 0 , -1, -1, -1, 1, 127); m_channelFlags = KisChannelInfo::FLAG_COLOR; } KisRightEdgeDetectionFilter::KisRightEdgeDetectionFilter() : KisConvolutionConstFilter(id(), "edge", i18n("Right Edge Detection")) { m_matrix = createKernel( -1, 0, 1 , -1, 0, 1 , -1, 0, 1, 1, 127); m_channelFlags = KisChannelInfo::FLAG_COLOR; } KisBottomEdgeDetectionFilter::KisBottomEdgeDetectionFilter() : KisConvolutionConstFilter(id(), "edge", i18n("Bottom Edge Detection")) { m_matrix = createKernel( -1, -1, -1 , 0, 0, 0 , 1, 1, 1, 1, 127); m_channelFlags = KisChannelInfo::FLAG_COLOR; } KisLeftEdgeDetectionFilter::KisLeftEdgeDetectionFilter() : KisConvolutionConstFilter(id(), "edge", i18n("Left Edge Detection")) { m_matrix = createKernel( 1, 0, -1 , 1, 0, -1 , 1, 0, -1, 1, 127); m_channelFlags = KisChannelInfo::FLAG_COLOR; }