Title: [225152] trunk
Revision
225152
Author
[email protected]
Date
2017-11-26 18:19:53 -0800 (Sun, 26 Nov 2017)

Log Message

feImage as filter input has skewed colors
https://bugs.webkit.org/show_bug.cgi?id=180021

Reviewed by Sam Weinig.
Source/WebCore:

Using an <feImage> as a filter input sometimes results in incorrect colors, because
the image is being sourced as linearRGB when it should always be sRGB.

Fix by setting the result colorspace in FEImage before we allocate the output
buffer.

Tests: svg/filters/feImage-color-fidelity-expected.svg
       svg/filters/feImage-color-fidelity.svg

* svg/graphics/filters/SVGFEImage.cpp:
(WebCore::FEImage::platformApplySoftware):

LayoutTests:

* svg/filters/feImage-color-fidelity-expected.svg: Added.
* svg/filters/feImage-color-fidelity.svg: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (225151 => 225152)


--- trunk/LayoutTests/ChangeLog	2017-11-27 01:46:59 UTC (rev 225151)
+++ trunk/LayoutTests/ChangeLog	2017-11-27 02:19:53 UTC (rev 225152)
@@ -1,5 +1,15 @@
 2017-11-26  Simon Fraser  <[email protected]>
 
+        feImage as filter input has skewed colors
+        https://bugs.webkit.org/show_bug.cgi?id=180021
+
+        Reviewed by Sam Weinig.
+
+        * svg/filters/feImage-color-fidelity-expected.svg: Added.
+        * svg/filters/feImage-color-fidelity.svg: Added.
+
+2017-11-26  Simon Fraser  <[email protected]>
+
         Use more Uint8ClampedArray& and constness in filter and image buffer code
         https://bugs.webkit.org/show_bug.cgi?id=180008
 

Added: trunk/LayoutTests/svg/filters/feImage-color-fidelity-expected.svg (0 => 225152)


--- trunk/LayoutTests/svg/filters/feImage-color-fidelity-expected.svg	                        (rev 0)
+++ trunk/LayoutTests/svg/filters/feImage-color-fidelity-expected.svg	2017-11-27 02:19:53 UTC (rev 225152)
@@ -0,0 +1,8 @@
+<svg version="1.2" width="600" height="300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <filter id="image" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse" x="0" y="0" width="1" height="1">
+      <feImage xlink:href="" result="image-out" width="200" height="200" />
+    </filter>
+  </defs>
+  <rect filter="url(#image)" fill="none" stroke="green" x="50" y="50" width="200" height="200"/>
+</svg>

Added: trunk/LayoutTests/svg/filters/feImage-color-fidelity.svg (0 => 225152)


--- trunk/LayoutTests/svg/filters/feImage-color-fidelity.svg	                        (rev 0)
+++ trunk/LayoutTests/svg/filters/feImage-color-fidelity.svg	2017-11-27 02:19:53 UTC (rev 225152)
@@ -0,0 +1,10 @@
+<svg version="1.2" width="600" height="300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+  <defs>
+    <filter id="displacement" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse" x="0" y="0" width="1" height="1">
+      <feImage xlink:href="" result="image-out" width="200" height="200" />
+      <feFlood flood-color="black" flood-opacity="1.0" height="200" width="200" result="black-input"/>
+      <feDisplacementMap scale="0" in="image-out" in2="black-input" xChannelSelector="R" yChannelSelector="G"/>
+    </filter>
+  </defs>
+  <rect filter="url(#displacement)" fill="none" stroke="green" x="50" y="50" width="200" height="200"/>
+</svg>

Modified: trunk/Source/WebCore/ChangeLog (225151 => 225152)


--- trunk/Source/WebCore/ChangeLog	2017-11-27 01:46:59 UTC (rev 225151)
+++ trunk/Source/WebCore/ChangeLog	2017-11-27 02:19:53 UTC (rev 225152)
@@ -1,3 +1,22 @@
+2017-11-26  Simon Fraser  <[email protected]>
+
+        feImage as filter input has skewed colors
+        https://bugs.webkit.org/show_bug.cgi?id=180021
+
+        Reviewed by Sam Weinig.
+        
+        Using an <feImage> as a filter input sometimes results in incorrect colors, because
+        the image is being sourced as linearRGB when it should always be sRGB.
+        
+        Fix by setting the result colorspace in FEImage before we allocate the output
+        buffer.
+
+        Tests: svg/filters/feImage-color-fidelity-expected.svg
+               svg/filters/feImage-color-fidelity.svg
+
+        * svg/graphics/filters/SVGFEImage.cpp:
+        (WebCore::FEImage::platformApplySoftware):
+
 2017-11-26  Minsheng Liu  <[email protected]>
 
         Cleanup code for RenderMathMLUnderOver::layoutBlock

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp (225151 => 225152)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp	2017-11-27 01:46:59 UTC (rev 225151)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp	2017-11-27 02:19:53 UTC (rev 225152)
@@ -94,6 +94,9 @@
     if (!m_image && !renderer)
         return;
 
+    // FEImage results are always in ColorSpaceSRGB
+    setResultColorSpace(ColorSpaceSRGB);
+
     ImageBuffer* resultImage = createImageBufferResult();
     if (!resultImage)
         return;
@@ -111,9 +114,6 @@
     IntPoint paintLocation = absolutePaintRect().location();
     destRect.move(-paintLocation.x(), -paintLocation.y());
 
-    // FEImage results are always in ColorSpaceSRGB
-    setResultColorSpace(ColorSpaceSRGB);
-
     if (renderer) {
         const AffineTransform& absoluteTransform = filter().absoluteTransform();
         resultImage->context().concatCTM(absoluteTransform);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to