summaryrefslogtreecommitdiff
path: root/shared/image_tools.h
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:15:16 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:15:16 +0200
commitbd6336c629841c6db3a6ca53a936d629d34db53b (patch)
tree3721ef997864108df175ce677a8a7d4342a6f1d2 /shared/image_tools.h
parent4.0 (diff)
downloadFreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.tar.gz
FreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.tar.bz2
FreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.zip
4.1
Diffstat (limited to 'shared/image_tools.h')
-rw-r--r--shared/image_tools.h157
1 files changed, 0 insertions, 157 deletions
diff --git a/shared/image_tools.h b/shared/image_tools.h
deleted file mode 100644
index e78e7ced..00000000
--- a/shared/image_tools.h
+++ /dev/null
@@ -1,157 +0,0 @@
-// **************************************************************************
-// * This file is part of the FreeFileSync project. It is distributed under *
-// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *
-// * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
-// **************************************************************************
-
-#ifndef IMAGE_TOOLS_HEADER_45782456427634254
-#define IMAGE_TOOLS_HEADER_45782456427634254
-
-#include <numeric>
-#include <wx/bitmap.h>
-#include <wx/dcmemory.h>
-
-
-namespace zen
-{
-wxBitmap greyScale(const wxBitmap& bmp); //greyscale + brightness adaption
-wxBitmap layOver(const wxBitmap& foreground, const wxBitmap& background); //merge
-
-void move(wxImage& img, int up, int left = 0);
-void adjustBrightness(wxImage& img, int targetLevel);
-double getAvgBrightness(const wxImage& img); //in [0, 255]
-void brighten(wxImage& img, int level); //level: delta per channel in points
-
-bool isEqual(const wxBitmap& lhs, const wxBitmap& rhs); //pixel-wise equality (respecting alpha channel)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-//################################### implementation ###################################
-inline
-void move(wxImage& img, int up, int left)
-{
- img = img.GetSubImage(wxRect(std::max(0, left), std::max(0, up), img.GetWidth() - abs(left), img.GetHeight() - abs(up)));
- img.Resize(wxSize(img.GetWidth() + abs(left), img.GetHeight() + abs(up)), wxPoint(-std::min(0, left), -std::min(0, up)));
-}
-
-
-inline
-wxBitmap greyScale(const wxBitmap& bmp)
-{
- wxImage output = bmp.ConvertToImage().ConvertToGreyscale(1.0/3, 1.0/3, 1.0/3); //treat all channels equally!
- //wxImage output = bmp.ConvertToImage().ConvertToGreyscale();
- adjustBrightness(output, 170);
- return output;
-}
-
-
-inline
-double getAvgBrightness(const wxImage& img)
-{
- const int pixelCount = img.GetWidth() * img.GetHeight();
- auto pixBegin = img.GetData();
- if (pixBegin)
- {
- auto pixEnd = pixBegin + 3 * pixelCount; //RGB
-
- if (img.HasAlpha())
- {
- const unsigned char* alphaFirst = img.GetAlpha();
-
- //calculate average weighted by alpha channel
- double dividend = 0;
- for (auto iter = pixBegin; iter != pixEnd; ++iter)
- dividend += *iter * static_cast<double>(alphaFirst[(iter - pixBegin) / 3]);
-
- const int divisor = 3.0 * std::accumulate(alphaFirst, alphaFirst + pixelCount, 0.0);
-
- return dividend / divisor;
- }
- else
- return std::accumulate(pixBegin, pixEnd, 0.0) / (3.0 * pixelCount);
- }
- return 0;
-}
-
-
-inline
-void brighten(wxImage& img, int level)
-{
- const int pixelCount = img.GetWidth() * img.GetHeight();
- auto pixBegin = img.GetData();
- if (pixBegin)
- {
- auto pixEnd = pixBegin + 3 * pixelCount; //RGB
- if (level > 0)
- std::for_each(pixBegin, pixEnd, [&](unsigned char& c) { c = std::min(255, c + level); });
- else
- std::for_each(pixBegin, pixEnd, [&](unsigned char& c) { c = std::max(0, c + level); });
- }
-}
-
-
-inline
-void adjustBrightness(wxImage& img, int targetLevel)
-{
- brighten(img, targetLevel - getAvgBrightness(img));
-}
-
-
-inline
-wxBitmap layOver(const wxBitmap& foreground, const wxBitmap& background)
-{
- wxBitmap output = background;
- {
- wxMemoryDC dc;
- dc.SelectObject(output);
- dc.DrawBitmap(foreground, 0, 0, true);
- dc.SelectObject(wxNullBitmap);
- }
- return output;
-}
-
-
-inline
-bool isEqual(const wxBitmap& lhs, const wxBitmap& rhs)
-{
- if (lhs.IsOk() != rhs.IsOk())
- return false;
- if (!lhs.IsOk())
- return true;
-
- const int pixelCount = lhs.GetWidth() * lhs.GetHeight();
- if (pixelCount != rhs.GetWidth() * rhs.GetHeight())
- return false;
-
- wxImage imLhs = lhs.ConvertToImage();
- wxImage imRhs = rhs.ConvertToImage();
-
- if (imLhs.HasAlpha() != imRhs.HasAlpha())
- return false;
-
- if (imLhs.HasAlpha())
- {
- if (!std::equal(imLhs.GetAlpha(), imLhs.GetAlpha() + pixelCount, imRhs.GetAlpha()))
- return false;
- }
-
- return std::equal(imLhs.GetData(), imLhs.GetData() + pixelCount * 3, imRhs.GetData());
-}
-}
-
-
-#endif //IMAGE_TOOLS_HEADER_45782456427634254
bgstack15