[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