summaryrefslogtreecommitdiffstats
path: root/ksquirrel/fmt_filters.h
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-22 19:31:25 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-22 19:31:25 +0000
commit6afd9d8dddbe9e450690e05d498a503c00333a5e (patch)
treeee3eaca74e8e33dd66f24f5fb6c1431d7a9ff429 /ksquirrel/fmt_filters.h
downloadksquirrel-6afd9d8dddbe9e450690e05d498a503c00333a5e.tar.gz
ksquirrel-6afd9d8dddbe9e450690e05d498a503c00333a5e.zip
Added KDE3 version of ksquirrel photo manager
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/ksquirrel@1094446 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'ksquirrel/fmt_filters.h')
-rw-r--r--ksquirrel/fmt_filters.h302
1 files changed, 302 insertions, 0 deletions
diff --git a/ksquirrel/fmt_filters.h b/ksquirrel/fmt_filters.h
new file mode 100644
index 0000000..688d4cb
--- /dev/null
+++ b/ksquirrel/fmt_filters.h
@@ -0,0 +1,302 @@
+/*
+ * Copyright (c) 2005 Dmitry Baryshev <ksquirrel.iv@gmail.com>
+ */
+
+/*
+ * All methods (except redeye) in this namespace are ported from KDE 3.2.3.
+ * All of them are copyrighted by their authors. See fmt_filters_README for more.
+ */
+
+/* This file is part of the KDE libraries
+ Copyright (C) 1998, 1999, 2001, 2002 Daniel M. Duley <mosfet@kde.org>
+ (C) 1998, 1999 Christian Tibirna <ctibirna@total.net>
+ (C) 1998, 1999 Dirk A. Mueller <mueller@kde.org>
+ (C) 1999 Geert Jansen <g.t.jansen@stud.tue.nl>
+ (C) 2000 Josef Weidendorfer <weidendo@in.tum.de>
+ (C) 2004 Zack Rusin <zack@kde.org>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+//
+// ===================================================================
+// Effects originally ported from ImageMagick for PixiePlus, plus a few
+// new ones. (mosfet 05/26/2003)
+// ===================================================================
+//
+/*
+ Portions of this software are based on ImageMagick. Such portions are clearly
+marked as being ported from ImageMagick. ImageMagick is copyrighted under the
+following conditions:
+
+Copyright (C) 2003 ImageMagick Studio, a non-profit organization dedicated to
+making software imaging solutions freely available.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files ("ImageMagick"), to deal
+in ImageMagick without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of ImageMagick, and to permit persons to whom the ImageMagick is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of ImageMagick.
+
+The software is provided "as is", without warranty of any kind, express or
+implied, including but not limited to the warranties of merchantability,
+fitness for a particular purpose and noninfringement. In no event shall
+ImageMagick Studio be liable for any claim, damages or other liability,
+whether in an action of contract, tort or otherwise, arising from, out of or
+in connection with ImageMagick or the use or other dealings in ImageMagick.
+
+Except as contained in this notice, the name of the ImageMagick Studio shall
+not be used in advertising or otherwise to promote the sale, use or other
+dealings in ImageMagick without prior written authorization from the
+ImageMagick Studio.
+*/
+
+#ifndef FMT_FILTERS_H
+#define FMT_FILTERS_H
+
+//////////////////////////////////////////
+// //
+// Pass the image through some filter //
+// //
+//////////////////////////////////////////
+
+
+namespace fmt_filters
+{
+ typedef char s8;
+ typedef unsigned char u8;
+
+ typedef short s16;
+ typedef unsigned short u16;
+
+ typedef int s32;
+ typedef unsigned int u32;
+
+ struct image
+ {
+ image() : data(0), w(0), h(0), rw(0), rh(0)
+ {}
+
+ image(unsigned char *d, int _w, int _h) : data(d), w(_w), h(_h), rw(_w), rh(_h)
+ {}
+
+ image(unsigned char *d, int _w, int _h, int _rw, int _rh) : data(d), w(_w), h(_h), rw(_rw), rh(_rh)
+ {}
+
+ unsigned char *data;
+ int w;
+ int h;
+ int rw;
+ int rh;
+ };
+
+ struct rgb
+ {
+ rgb() : r(0), g(0), b(0)
+ {}
+
+ rgb(int _r, int _g, int _b) : r(_r), g(_g), b(_b)
+ {}
+
+ unsigned char r;
+ unsigned char g;
+ unsigned char b;
+ };
+
+ struct rgba
+ {
+ rgba(int r1, int g1, int b1, int a1) : r(r1), g(g1), b(b1), a(a1)
+ {}
+
+ rgba() : r(0), g(0), b(0), a(0)
+ {}
+
+ unsigned char r;
+ unsigned char g;
+ unsigned char b;
+ unsigned char a;
+ };
+
+ enum NoiseType
+ {
+ UniformNoise = 0, // Uniform distribution
+ GaussianNoise, // Gaussian distribution
+ MultiplicativeGaussianNoise, // Multiplicative Gaussian distribution
+ ImpulseNoise, // Impulse distribution
+ LaplacianNoise, // Laplacian distribution
+ PoissonNoise // Poisson distribution
+ };
+
+
+ bool checkImage(const image &im);
+
+ // colorize the image, which is w x h, left alpha channel unchanged.
+ //
+ // it just adds to each pixel in the image
+ // aproproriate value.
+ void colorize(const image &im, int red, int green, int blue);
+
+ // change brightness of the image
+ void brightness(const image &im, int bn);
+
+ // change gamma
+ // gamma should be 0.0 <= L <= 6.0
+ //
+ // it is no problem to set L to 8.0 or 9.0, but the resulting
+ // image won't have much difference from 6.0
+ void gamma(const image &im, double L);
+
+ // change contrast with Photoshop-like method
+ // contrast should be -255 <= contrast <= 255
+ void contrast(const image &im, int contrast);
+
+ enum swapRGBtype { GBR = 0, BRG = 1 };
+
+ // negative
+ void negative(const image &im);
+
+ // swap RGB values
+ void swapRGB(const image &im, int type);
+
+ //
+ // All the following filters are ported from KDE's
+ // KImageEffect. See kdelibs/kdefx/kimageeffect.cpp
+ // for more.
+ //
+
+ // blend
+ // opacity = [0.0; 1.0]
+ void blend(const image &im, const rgb &rgb, float opacity);
+
+ // val = [0.0; 1.0]
+ void fade(const image &im, const rgb &rgb, float val);
+
+ void gray(const image &im);
+
+ // desat = [0.0; 1.0]
+ void desaturate(const image &im, float desat);
+
+ // threshold = [0; 255]
+ void threshold(const image &im, unsigned int threshold);
+
+ // factor = [0.0; 50.0]
+ void solarize(const image &im, double factor);
+
+ // amount = [1; 10]
+ void spread(const image &im, unsigned int amount);
+
+ // degrees = [-720.0; 720.0]
+ void swirl(const image &im, double degrees, const rgba &background);
+
+ void noise(const image &im, NoiseType noise_type);
+
+ void flatten(const image &im, const rgb &ca, const rgb &cb);
+
+ // azimuth = [0.0; 90.0], elevation = [0.0; 90.0]
+ void shade(const image &im, bool color, double azimuth, double elevation);
+
+ void equalize(const image &im);
+
+ // radius = [0.01; 90.0], sigma = [0.01; 50.0]
+ void blur(const image &im, double radius, double sigma);
+
+ void despeckle(const image &im);
+
+ // factor = [0; 100]
+ void implode(const image &im, double factor, const rgba &background);
+
+ // radius = [0.01; 30.0]
+ void edge(image &im, double radius);
+
+ // radius = [0.01; 99.9], sigma = [0.01; 99.9]
+ void emboss(image &im, double radius, double sigma);
+
+ // radius = [0.01; 99.9], sigma = [0.01; 30.0]
+ void sharpen(image &im, double radius, double sigma);
+
+ // radius = [1.0; 5.0]
+ void oil(const image &im, double radius);
+
+/*
+ * Red-eye removal was taken from "redeye" plugin for GIMP
+ */
+
+/* redeye.c: redeye remover plugin code
+ *
+ * Copyright (C) 2004 Robert Merkel <robert.merkel@benambra.org> (the "Author").
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the Author of the
+ * Software shall not be used in advertising or otherwise to promote the
+ * sale, use or other dealings in this Software without prior written
+ * authorization from the Author.
+1;3B */
+
+ // red-eye removal.
+ // th = [0; 255]
+ void redeye(const image &im, const int w, const int h,
+ const int x, const int y,
+ int th);
+
+ // Do we need some color definitions ?
+ static const rgba white = rgba(255, 255, 255, 255);
+ static const rgba black = rgba(0, 0, 0, 255);
+ static const rgba red = rgba(255, 0, 0, 255);
+ static const rgba green = rgba(0, 255, 0, 255);
+ static const rgba blue = rgba(0, 0, 255, 255);
+ static const rgba cyan = rgba(0, 255, 255, 255);
+ static const rgba magenta = rgba(255, 0, 255, 255);
+ static const rgba yellow = rgba(255, 255, 0, 255);
+ static const rgba mediumgray = rgba(128, 128, 128, 255);
+ static const rgba lightgray = rgba(160, 160, 164, 255);
+ static const rgba normalgray = rgba(192, 192, 192, 255);
+ static const rgba darkred = rgba(128, 0, 0, 255);
+ static const rgba darkgreen = rgba(0, 128, 0, 255);
+ static const rgba darkblue = rgba(0, 0, 128, 255);
+ static const rgba darkcyan = rgba(0, 128, 128, 255);
+ static const rgba darkmagenta = rgba(128, 0, 128, 255);
+ static const rgba darkyellow = rgba(128, 128, 0, 255);
+}
+
+#endif