summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/image-decoders
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/image-decoders')
-rw-r--r--WebCore/platform/image-decoders/ImageDecoder.h2
-rw-r--r--WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp7
2 files changed, 8 insertions, 1 deletions
diff --git a/WebCore/platform/image-decoders/ImageDecoder.h b/WebCore/platform/image-decoders/ImageDecoder.h
index dde8550..ceb8f9b 100644
--- a/WebCore/platform/image-decoders/ImageDecoder.h
+++ b/WebCore/platform/image-decoders/ImageDecoder.h
@@ -326,6 +326,8 @@ namespace WebCore {
// transparency.
virtual bool supportsAlpha() const { return true; }
+ void setIgnoreGammaAndColorProfile(bool flag) { m_ignoreGammaAndColorProfile = flag; }
+
// Whether or not the gamma and color profile are applied.
bool ignoresGammaAndColorProfile() const { return m_ignoreGammaAndColorProfile; }
diff --git a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
index ff1262e..a2b9f8e 100644
--- a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
@@ -208,8 +208,13 @@ public:
// Let libjpeg take care of gray->RGB and YCbCr->RGB conversions.
switch (m_info.jpeg_color_space) {
case JCS_GRAYSCALE:
- case JCS_RGB:
case JCS_YCbCr:
+ // Grayscale images get "upsampled" by libjpeg. If we use
+ // their color profile, CoreGraphics will "upsample" them
+ // again, resulting in horizontal distortions.
+ m_decoder->setIgnoreGammaAndColorProfile(true);
+ // Note fall-through!
+ case JCS_RGB:
m_info.out_color_space = JCS_RGB;
break;
case JCS_CMYK: