Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(730)

Unified Diff: Source/core/platform/graphics/ImageBuffer.cpp

Issue 14856010: Adding color space conversion code (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Attemptimp to re-upload the patch Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/platform/graphics/ImageBuffer.h ('k') | Source/core/platform/graphics/filters/FEBlend.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/platform/graphics/ImageBuffer.cpp
diff --git a/Source/core/platform/graphics/ImageBuffer.cpp b/Source/core/platform/graphics/ImageBuffer.cpp
index 344c9e26d4536188ee230e4980754b56e28ed4fe..80e40bd1c6fef295e125f90a0799ea32f2685644 100644
--- a/Source/core/platform/graphics/ImageBuffer.cpp
+++ b/Source/core/platform/graphics/ImageBuffer.cpp
@@ -33,11 +33,38 @@
namespace WebCore {
-void ImageBuffer::transformColorSpace(ColorSpace srcColorSpace, ColorSpace dstColorSpace)
+const Vector<uint8_t>& ImageBuffer::getLinearRgbLUT()
{
- DEFINE_STATIC_LOCAL(Vector<int>, deviceRgbLUT, ());
- DEFINE_STATIC_LOCAL(Vector<int>, linearRgbLUT, ());
+ DEFINE_STATIC_LOCAL(Vector<uint8_t>, linearRgbLUT, ());
+ if (linearRgbLUT.isEmpty()) {
+ for (unsigned i = 0; i < 256; i++) {
+ float color = i / 255.0f;
+ color = (color <= 0.04045f ? color / 12.92f : pow((color + 0.055f) / 1.055f, 2.4f));
+ color = std::max(0.0f, color);
+ color = std::min(1.0f, color);
+ linearRgbLUT.append(static_cast<uint8_t>(round(color * 255)));
+ }
+ }
+ return linearRgbLUT;
+}
+const Vector<uint8_t>& ImageBuffer::getDeviceRgbLUT()
+{
+ DEFINE_STATIC_LOCAL(Vector<uint8_t>, deviceRgbLUT, ());
+ if (deviceRgbLUT.isEmpty()) {
+ for (unsigned i = 0; i < 256; i++) {
+ float color = i / 255.0f;
+ color = (powf(color, 1.0f / 2.4f) * 1.055f) - 0.055f;
+ color = std::max(0.0f, color);
+ color = std::min(1.0f, color);
+ deviceRgbLUT.append(static_cast<uint8_t>(round(color * 255)));
+ }
+ }
+ return deviceRgbLUT;
+}
+
+void ImageBuffer::transformColorSpace(ColorSpace srcColorSpace, ColorSpace dstColorSpace)
+{
if (srcColorSpace == dstColorSpace)
return;
@@ -47,27 +74,9 @@ void ImageBuffer::transformColorSpace(ColorSpace srcColorSpace, ColorSpace dstCo
return;
if (dstColorSpace == ColorSpaceLinearRGB) {
- if (linearRgbLUT.isEmpty()) {
- for (unsigned i = 0; i < 256; i++) {
- float color = i / 255.0f;
- color = (color <= 0.04045f ? color / 12.92f : pow((color + 0.055f) / 1.055f, 2.4f));
- color = std::max(0.0f, color);
- color = std::min(1.0f, color);
- linearRgbLUT.append(static_cast<int>(round(color * 255)));
- }
- }
- platformTransformColorSpace(linearRgbLUT);
+ platformTransformColorSpace(getLinearRgbLUT());
} else if (dstColorSpace == ColorSpaceDeviceRGB) {
- if (deviceRgbLUT.isEmpty()) {
- for (unsigned i = 0; i < 256; i++) {
- float color = i / 255.0f;
- color = (powf(color, 1.0f / 2.4f) * 1.055f) - 0.055f;
- color = std::max(0.0f, color);
- color = std::min(1.0f, color);
- deviceRgbLUT.append(static_cast<int>(round(color * 255)));
- }
- }
- platformTransformColorSpace(deviceRgbLUT);
+ platformTransformColorSpace(getDeviceRgbLUT());
}
}
« no previous file with comments | « Source/core/platform/graphics/ImageBuffer.h ('k') | Source/core/platform/graphics/filters/FEBlend.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698