[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegraphics/kolourpaint/imagelib/effects
From:       Clarence Dang <dang () kde ! org>
Date:       2006-12-14 3:36:28
Message-ID: 1166067388.740570.29563.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 613569 by dang:

missed part of last commit - I love SVN bugs

 M  +79 -0     kpEffectGrayscale.cpp  


--- trunk/KDE/kdegraphics/kolourpaint/imagelib/effects/kpEffectGrayscale.cpp #613568:613569
@@ -0,0 +1,79 @@
+
+/*
+   Copyright (c) 2003-2006 Clarence Dang <dang@kde.org>
+   All rights reserved.
+
+   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.
+*/
+
+
+#define DEBUG_KP_PIXMAP_FX 0
+
+
+#include <kpEffectGrayscale.h>
+
+#include <kppixmapfx.h>
+
+
+static QRgb toGray (QRgb rgb)
+{
+    // naive way that doesn't preserve brightness
+    // int gray = (qRed (rgb) + qGreen (rgb) + qBlue (rgb)) / 3;
+
+    // over-exaggerates red & blue
+    // int gray = qGray (rgb);
+
+    int gray = (212671 * qRed (rgb) + 715160 * qGreen (rgb) + 72169 * qBlue (rgb)) / 1000000;
+    return qRgba (gray, gray, gray, qAlpha (rgb));
+}
+
+
+// public static
+kpImage kpEffectGrayscale::applyEffect (const kpImage &image)
+{
+    KP_PFX_CHECK_NO_ALPHA_CHANNEL (image);
+
+    QImage qimage = kpPixmapFX::convertToImage (image);
+    
+    // TODO: Why not just write to the kpImage directly?
+    if (qimage.depth () > 8)
+    {
+        for (int y = 0; y < qimage.height (); y++)
+        {
+            for (int x = 0; x < qimage.width (); x++)
+            {
+                qimage.setPixel (x, y, toGray (qimage.pixel (x, y)));
+            }
+        }
+    }
+    else
+    {
+        // 1- & 8- bit images use a color table
+        for (int i = 0; i < qimage.numColors (); i++)
+            qimage.setColor (i, toGray (qimage.color (i)));
+    }
+
+    const kpImage ret = kpPixmapFX::convertToPixmap (qimage);
+
+    KP_PFX_CHECK_NO_ALPHA_CHANNEL (ret);
+    return ret;
+}
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic