Initial import
[aperez-sandbox:harmattan-plugin-desaturate.git] / quilldesaturateplugin / quilldesaturateplugin.cpp
1 /*
2  * quilldesaturateplugin.cpp
3  * Copyright (C) 2011 Adrian Perez <aperez@igalia.com>
4  *
5  * Distributed under terms of the LGPLv2 license.
6  */
7
8 #include "quilldesaturateplugin.h"
9
10 #define FILTER_NAME_DESATURATE "com.igalia.aperez.desaturate"
11
12 QuillDesaturatePlugin::QuillDesaturatePlugin():
13     QObject()
14 {
15 }
16
17 QuillImageFilterImplementation*
18 QuillDesaturatePlugin::create(const QString& name)
19 {
20     if (name == FILTER_NAME_DESATURATE) {
21         return new Desaturate;
22     } else {
23         return 0;
24     }
25 }
26
27 const QStringList QuillDesaturatePlugin::name() const
28 {
29     return QStringList() << FILTER_NAME_DESATURATE;
30 }
31
32 Q_EXPORT_PLUGIN2(quilldesaturateplugin, QuillDesaturatePlugin)
33
34
35 Desaturate::Desaturate()
36 {
37 }
38
39 Desaturate::~Desaturate()
40 {
41 }
42
43 QuillImage
44 Desaturate::apply(const QuillImage& image) const
45 {
46     QuillImage result(image);
47
48     QRgb* endp(reinterpret_cast<QRgb*>(result.bits() + result.numBytes()));
49     for (QRgb *p = reinterpret_cast<QRgb*>(result.bits()); p < endp; p++) {
50         int value = (qRed(*p) + qGreen(*p) + qBlue(*p)) / 3;
51         *p = qRgba(value, value, value, qAlpha(*p));
52     }
53
54     return result;
55 }
56
57 const QString
58 Desaturate::name() const
59 {
60     return FILTER_NAME_DESATURATE;
61 }