00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __KIMAGE_EFFECT_H
00032 #define __KIMAGE_EFFECT_H
00033
00034 class QImage;
00035 class QSize;
00036 class QColor;
00037 class QPoint;
00038 class QRect;
00039
00048 class KImageEffect
00049 {
00050 public:
00056 enum GradientType { VerticalGradient,
00057 HorizontalGradient,
00058 DiagonalGradient,
00059 CrossDiagonalGradient,
00060 PyramidGradient,
00061 RectangleGradient,
00062 PipeCrossGradient,
00063 EllipticGradient
00064 };
00065
00071 enum RGBComponent { Red,
00072 Green,
00073 Blue,
00074 Gray,
00075 All
00076 };
00077
00082 enum Lighting {NorthLite,
00083 NWLite,
00084 WestLite,
00085 SWLite,
00086 SouthLite,
00087 SELite,
00088 EastLite,
00089 NELite
00090 };
00091
00096 enum ModulationType { Intensity,
00097 Saturation,
00098 HueShift,
00099 Contrast
00100 };
00101
00106 enum NoiseType { UniformNoise=0,
00107 GaussianNoise,
00108 MultiplicativeGaussianNoise,
00109 ImpulseNoise,
00110 LaplacianNoise,
00111 PoissonNoise
00112 };
00113
00118 enum RotateDirection{ Rotate90,
00119 Rotate180,
00120 Rotate270
00121 };
00122
00127 enum BumpmapType {
00128 Linear,
00129 Spherical,
00130 Sinuosidal
00131 };
00132
00144 static QImage gradient(const QSize &size, const QColor &ca,
00145 const QColor &cb, GradientType type, int ncols=3);
00146
00161 static QImage unbalancedGradient(const QSize &size, const QColor &ca,
00162 const QColor &cb, GradientType type, int xfactor = 100,
00163 int yfactor = 100, int ncols = 3);
00164
00181 static QImage& blend(const QColor& clr, QImage& dst, float opacity);
00182
00199 static QImage& blend(QImage& src, QImage& dst, float opacity);
00200
00215 static QImage& blend(QImage &image, float initial_intensity,
00216 const QColor &bgnd, GradientType eff,
00217 bool anti_dir=false);
00218
00229 static QImage& blend(QImage &image1,QImage &image2,
00230 GradientType gt, int xf=100, int yf=100);
00231
00244 static QImage& blend(QImage &image1, QImage &image2,
00245 QImage &blendImage, RGBComponent channel);
00246
00254 static bool blend(const QImage & upper, const QImage & lower, QImage & output);
00255
00256
00273 static bool blend(int &x, int &y, const QImage & upper, const QImage & lower, QImage & output);
00274
00285 static bool blendOnLower(int x, int y, const QImage & upper, const QImage & lower);
00286
00299 static void blendOnLower(const QImage &upper, const QPoint &upperOffset,
00300 QImage &lower, const QRect &lowerRect);
00301
00316 static void blendOnLower(const QImage &upper, const QPoint &upperOffset,
00317 QImage &lower, const QRect &lowerRect, float opacity);
00318
00324 enum Disposition { NoImage = 0,
00325 Centered,
00326 Tiled,
00327 CenterTiled,
00328 CenteredMaxpect,
00329 TiledMaxpect,
00330 Scaled,
00331 CenteredAutoFit
00332 };
00333
00348 static QRect computeDestinationRect(const QSize &lowerSize,
00349 Disposition disposition, QImage &upper);
00350
00357 static void blendOnLower(QImage &upper, QImage &lower,
00358 Disposition disposition, float opacity);
00359
00369 static QImage& channelIntensity(QImage &image, float percent,
00370 RGBComponent channel);
00371
00382 static QImage& fade(QImage &image, float val, const QColor &color);
00383
00384
00395 static QImage& flatten(QImage &image, const QColor &ca,
00396 const QColor &cb, int ncols=0);
00397
00406 static QImage& hash(QImage &image, Lighting lite=NorthLite,
00407 unsigned int spacing=0);
00408
00422 static QImage& intensity(QImage &image, float percent);
00423
00435 static QImage& modulate(QImage &image, QImage &modImage, bool reverse,
00436 ModulationType type, int factor, RGBComponent channel);
00437
00447 static QImage& toGray(QImage &image, bool fast = false);
00448
00456 static QImage& desaturate(QImage &image, float desat = 0.3);
00457
00467 static QImage& contrast(QImage &image, int c);
00468
00478 static QImage& dither(QImage &image, const QColor *palette, int size);
00479
00486 static QImage& selectedImage( QImage &img, const QColor &col );
00487
00499 static void contrastHSV(QImage &img, bool sharpen=true);
00500
00507 static void normalize(QImage &img);
00508
00515 static void equalize(QImage &img);
00516
00526 static void threshold(QImage &img, unsigned int value=128);
00527
00536 static void solarize(QImage &img, double factor=50.0);
00537
00551 static QImage emboss(QImage &src, double radius, double sigma);
00552
00556 static QImage emboss(QImage &src);
00557
00566 static QImage despeckle(QImage &src);
00567
00579 static QImage charcoal(QImage &src, double radius, double sigma);
00580
00585 static QImage charcoal(QImage &src, double factor=50.0);
00586
00595 static QImage rotate(QImage &src, RotateDirection r);
00596
00608 static QImage sample(QImage &src, int w, int h);
00609
00618 static QImage addNoise(QImage &src, NoiseType type = GaussianNoise);
00619
00631 static QImage blur(QImage &src, double radius, double sigma);
00632
00637 static QImage blur(QImage &src, double factor=50.0);
00638
00649 static QImage edge(QImage &src, double radius);
00650
00661 static QImage implode(QImage &src, double factor=30.0,
00662 unsigned int background = 0xFFFFFFFF);
00663
00673 static QImage oilPaintConvolve(QImage &src, double radius);
00674
00679 static QImage oilPaint(QImage &src, int radius=3);
00680
00692 static QImage sharpen(QImage &src, double radius, double sigma);
00693
00698 static QImage sharpen(QImage &src, double factor=30.0);
00699
00708 static QImage spread(QImage &src, unsigned int amount=3);
00709
00720 static QImage shade(QImage &src, bool color_shading=true, double azimuth=30.0,
00721 double elevation=30.0);
00732 static QImage swirl(QImage &src, double degrees=50.0, unsigned int background =
00733 0xFFFFFFFF);
00734
00746 static QImage wave(QImage &src, double amplitude=25.0, double frequency=150.0,
00747 unsigned int background = 0xFFFFFFFF);
00748
00768 static QImage bumpmap(QImage &img, QImage &map, double azimuth, double elevation,
00769 int depth, int xofs, int yofs, int waterlevel,
00770 int ambient, bool compensate, bool invert,
00771 BumpmapType type, bool tiled);
00772
00773 private:
00774
00779 static unsigned int lHash(unsigned int c);
00780 static unsigned int uHash(unsigned int c);
00781
00785 static int nearestColor( int r, int g, int b, const QColor *pal, int size );
00786
00787 static void hull(const int x_offset, const int y_offset, const int polarity,
00788 const int width, const int height,
00789 unsigned int *f, unsigned int *g);
00790 static unsigned int generateNoise(unsigned int pixel, NoiseType type);
00791 static unsigned int interpolateColor(QImage *image, double x, double y,
00792 unsigned int background);
00793
00794 static int getOptimalKernelWidth(double radius, double sigma);
00795 static bool convolveImage(QImage *image, QImage *dest,
00796 const unsigned int order,
00797 const double *kernel);
00798 static void blurScanLine(double *kernel, int width,
00799 unsigned int *src, unsigned int *dest,
00800 int columns);
00801 static int getBlurKernel(int width, double sigma, double **kernel);
00802 };
00803
00804 #endif