summaryrefslogtreecommitdiffstats
path: root/src/libs/dimg/dcolorpixelaccess.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/dimg/dcolorpixelaccess.h')
-rw-r--r--src/libs/dimg/dcolorpixelaccess.h78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/libs/dimg/dcolorpixelaccess.h b/src/libs/dimg/dcolorpixelaccess.h
new file mode 100644
index 00000000..30695c3e
--- /dev/null
+++ b/src/libs/dimg/dcolorpixelaccess.h
@@ -0,0 +1,78 @@
+/* ============================================================
+ *
+ * This file is a part of digiKam project
+ * http://www.digikam.org
+ *
+ * Date : 2005-03-02
+ * Description : methods to access on pixels color
+ *
+ * Copyright (C) 2005-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
+ * Copyright (C) 2006-2007 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software Foundation;
+ * either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * ============================================================ */
+
+#ifndef DCOLORPIXELACCESS_H
+#define DCOLORPIXELACCESS_H
+
+namespace Digikam
+{
+
+// These methods are used in quite a few image effects,
+// typically in loops iterating the data.
+// Providing them as inline methods allows the compiler to optimize better.
+
+inline void DColor::setColor(const uchar *data, bool sixteenBit)
+{
+ m_sixteenBit = sixteenBit;
+
+ if (!sixteenBit) // 8 bits image
+ {
+ setBlue (data[0]);
+ setGreen(data[1]);
+ setRed (data[2]);
+ setAlpha(data[3]);
+ }
+ else // 16 bits image
+ {
+ unsigned short* data16 = (unsigned short*)data;
+ setBlue (data16[0]);
+ setGreen(data16[1]);
+ setRed (data16[2]);
+ setAlpha(data16[3]);
+ }
+}
+
+inline void DColor::setPixel(uchar *data) const
+{
+ if (sixteenBit()) // 16 bits image.
+ {
+ unsigned short *data16 = (unsigned short *)data;
+ data16[0] = (unsigned short)blue();
+ data16[1] = (unsigned short)green();
+ data16[2] = (unsigned short)red();
+ data16[3] = (unsigned short)alpha();
+ }
+ else // 8 bits image.
+ {
+ data[0] = (uchar)blue();
+ data[1] = (uchar)green();
+ data[2] = (uchar)red();
+ data[3] = (uchar)alpha();
+ }
+}
+
+
+} // namespace Digikam
+
+#endif // DCOLORPIXELACCESS_H