diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-22 19:31:25 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-22 19:31:25 +0000 |
commit | 6afd9d8dddbe9e450690e05d498a503c00333a5e (patch) | |
tree | ee3eaca74e8e33dd66f24f5fb6c1431d7a9ff429 /ksquirrel/fmt_filters.h | |
download | ksquirrel-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.h | 302 |
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 |