Get the brightness value of the buffer.
Change-Id: I3b95ff0d786cfb3a60a10aeca994079504edfea8
/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
return GetImplementation(*this).IsAlphaPreMultiplied();
}
+uint32_t PixelBuffer::GetBrightness() const
+{
+ return GetImplementation(*this).GetBrightness();
+}
+
} // namespace Devel
} // namespace Dali
#define DALI_PIXEL_BUFFER_H
/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
bool IsAlphaPreMultiplied() const;
+ /**
+ * @brief Get the brightness of the pixel buffer.
+ * @note The range is 255 to 0. The closer to 255, the brighter. 0 is not bright.
+ * @return brightness of the pixel buffer.
+ */
+ uint32_t GetBrightness() const;
+
public:
/**
* @brief The constructor.
namespace
{
const float TWO_PI = 2.f * Math::PI; ///< 360 degrees in radians
+// based on W3C Recommendations (https://www.w3.org/TR/AERT/#color-contrast)
+constexpr uint32_t BRIGHTNESS_CONSTANT_R = 299;
+constexpr uint32_t BRIGHTNESS_CONSTANT_G = 587;
+constexpr uint32_t BRIGHTNESS_CONSTANT_B = 114;
} // namespace
PixelBuffer::PixelBuffer(unsigned char* buffer,
return mPreMultiplied;
}
+uint32_t PixelBuffer::GetBrightness() const
+{
+ uint32_t brightness = 0;
+
+ uint32_t bytesPerPixel = Pixel::GetBytesPerPixel(mPixelFormat);
+ if(bytesPerPixel)
+ {
+ unsigned char* pixel = mBuffer;
+ const uint32_t bufferSize = mWidth * mHeight;
+ uint64_t red = 0;
+ uint64_t green = 0;
+ uint64_t blue = 0;
+
+ for(uint32_t i = 0; i < bufferSize; ++i)
+ {
+ red += ReadChannel(pixel, mPixelFormat, Adaptor::RED);
+ green += ReadChannel(pixel, mPixelFormat, Adaptor::GREEN);
+ blue += ReadChannel(pixel, mPixelFormat, Adaptor::BLUE);
+ pixel += bytesPerPixel;
+ }
+ // http://www.w3.org/TR/AERT#color-contrast
+ brightness = (red * BRIGHTNESS_CONSTANT_R + green * BRIGHTNESS_CONSTANT_G + blue * BRIGHTNESS_CONSTANT_B) / (1000uLL * bufferSize);
+ }
+
+ return brightness;
+}
+
} // namespace Adaptor
} // namespace Internal
} // namespace Dali
*/
bool IsAlphaPreMultiplied() const;
+ /**
+ * @copydoc Devel::PixelBuffer::GetBrightness()
+ */
+ uint32_t GetBrightness() const;
+
private:
/*
* Undefined copy constructor.