Warning, /graphics/kolourpaint/patches/linear-sharpen-effect.diff is written in an unsupported language. File is not indexed.
0001 Changes the "Sharpen" effect to Blitz::sharpen() instead of 0002 Blitz::gaussianSharpen(), in order to avoid parameters that are currently 0003 set in a dangerously adhoc fashion (radius, sigma, repeat). 0004 0005 Unfortunately, the results do not look good. 0006 0007 2007-08-14 20:35 0008 0009 0010 Index: imagelib/effects/kpEffectBlurSharpen.cpp 0011 =================================================================== 0012 --- imagelib/effects/kpEffectBlurSharpen.cpp (revision 699849) 0013 +++ imagelib/effects/kpEffectBlurSharpen.cpp (working copy) 0014 @@ -26,7 +26,7 @@ 0015 */ 0016 0017 0018 -#define DEBUG_KP_EFFECT_BLUR_SHARPEN 0 0019 +#define DEBUG_KP_EFFECT_BLUR_SHARPEN 1 0020 0021 0022 #include <kpEffectBlurSharpen.h> 0023 @@ -46,18 +46,10 @@ 0024 #endif 0025 0026 0027 -static QImage BlurQImage (const QImage qimage_, int strength) 0028 +static int RadiusForStrength (int strength) 0029 { 0030 - QImage qimage = qimage_; 0031 - if (strength == 0) 0032 - return qimage; 0033 - 0034 - 0035 - // The numbers that follow were picked by experimentation to try to get 0036 - // an effect linearly proportional to <strength> and at the same time, 0037 - // be fast enough. 0038 - // 0039 - // I still have no idea what "radius" means. 0040 + // (must be in range and not 0) 0041 + Q_ASSERT (strength > 0 && strength <= kpEffectBlurSharpen::MaxStrength); 0042 0043 const double RadiusMin = 1; 0044 const double RadiusMax = 10; 0045 @@ -67,92 +59,36 @@ static QImage BlurQImage (const QImage q 0046 (kpEffectBlurSharpen::MaxStrength - 1); 0047 0048 #if DEBUG_KP_EFFECT_BLUR_SHARPEN 0049 - kDebug () << "kpEffectBlurSharpen.cpp:BlurQImage(strength=" << strength << ")" 0050 + kDebug () << "kpEffectBlurSharpen.cpp:RadiusForStrength(strength=" << strength << ")" 0051 << " radius=" << radius 0052 << endl; 0053 #endif 0054 0055 - 0056 - qimage = Blitz::blur (qimage, qRound (radius)); 0057 - 0058 - 0059 - return qimage; 0060 + return qRound (radius); 0061 } 0062 0063 -static QImage SharpenQImage (const QImage &qimage_, int strength) 0064 + 0065 +static QImage BlurQImage (const QImage qimage_, int strength) 0066 { 0067 QImage qimage = qimage_; 0068 if (strength == 0) 0069 return qimage; 0070 0071 0072 - // The numbers that follow were picked by experimentation to try to get 0073 - // an effect linearly proportional to <strength> and at the same time, 0074 - // be fast enough. 0075 - // 0076 - // I still have no idea what "radius" and "sigma" mean. 0077 - 0078 - const double RadiusMin = .1; 0079 - const double RadiusMax = 2.5; 0080 - const double radius = RadiusMin + 0081 - (strength - 1) * 0082 - (RadiusMax - RadiusMin) / 0083 - (kpEffectBlurSharpen::MaxStrength - 1); 0084 - 0085 - const double SigmaMin = .5; 0086 - const double SigmaMax = 3.0; 0087 - const double sigma = SigmaMin + 0088 - (strength - 1) * 0089 - (SigmaMax - SigmaMin) / 0090 - (kpEffectBlurSharpen::MaxStrength - 1); 0091 - 0092 - const double RepeatMin = 1; 0093 - const double RepeatMax = 2; 0094 - const double repeat = qRound (RepeatMin + 0095 - (strength - 1) * 0096 - (RepeatMax - RepeatMin) / 0097 - (kpEffectBlurSharpen::MaxStrength - 1)); 0098 + qimage = Blitz::blur (qimage, ::RadiusForStrength (strength)); 0099 0100 -// I guess these values are more proper as they use an auto-calculated 0101 -// radius but they cause sharpen() to be too slow. 0102 -#if 0 0103 - const double radius = 0/*auto-calculate*/; 0104 - 0105 - const double SigmaMin = .6; 0106 - const double SigmaMax = 1.0; 0107 - const double sigma = SigmaMin + 0108 - (strength - 1) * 0109 - (SigmaMax - SigmaMin) / 0110 - (kpEffectBlurSharpen::MaxStrength - 1); 0111 0112 - const double RepeatMin = 1; 0113 - const double RepeatMax = 3; 0114 - const double repeat = qRound (RepeatMin + 0115 - (strength - 1) * 0116 - (RepeatMax - RepeatMin) / 0117 - (kpEffectBlurSharpen::MaxStrength - 1)); 0118 -#endif 0119 + return qimage; 0120 +} 0121 0122 -#if DEBUG_KP_EFFECT_BLUR_SHARPEN 0123 - kDebug () << "kpEffectBlurSharpen.cpp:SharpenQImage(strength=" << strength << ")" 0124 - << " radius=" << radius 0125 - << " sigma=" << sigma 0126 - << " repeat=" << repeat 0127 - << endl; 0128 -#endif 0129 +static QImage SharpenQImage (const QImage &qimage_, int strength) 0130 +{ 0131 + QImage qimage = qimage_; 0132 + if (strength == 0) 0133 + return qimage; 0134 0135 0136 - for (int i = 0; i < repeat; i++) 0137 - { 0138 - #if DEBUG_KP_EFFECT_BLUR_SHARPEN 0139 - QTime timer; timer.start (); 0140 - #endif 0141 - qimage = Blitz::gaussianSharpen (qimage, radius, sigma); 0142 - #if DEBUG_KP_EFFECT_BLUR_SHARPEN 0143 - kDebug () << "\titeration #" + QString::number (i) 0144 - << ": " + QString::number (timer.elapsed ()) << "ms" << endl; 0145 - #endif 0146 - } 0147 + qimage = Blitz::sharpen (qimage, ::RadiusForStrength (strength) * 10); 0148 0149 0150 return qimage;