Diff
Modified: branches/safari-612-branch/LayoutTests/ChangeLog (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/ChangeLog 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/ChangeLog 2021-10-08 19:44:23 UTC (rev 283827)
@@ -1,5 +1,56 @@
2021-10-08 Russell Epstein <[email protected]>
+ Cherry-pick r282634. rdar://problem/83957287
+
+ Preserve canvas color space when producing JPEGs from toDataURL/toBlob
+ https://bugs.webkit.org/show_bug.cgi?id=230209
+ <rdar://82948457>
+
+ Reviewed by Sam Weinig.
+
+ LayoutTests/imported/w3c:
+
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas-expected.txt: Added.
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html: Copied from LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html.
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas-expected.txt:
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html:
+ * web-platform-tests/html/canvas/tools/yaml/element/color_space.yaml:
+
+ Source/WebCore:
+
+ Test: imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html
+
+ * platform/graphics/cg/ImageBufferCGBackend.cpp:
+ (WebCore::colorSpaceForBitmap): Return an appropriate color space for
+ performing any graphics operations on ImageBuffers (such as scaling or
+ cropping, or compositing on top of solid colors) becore encoding.
+ (WebCore::createBitmapImageAfterScalingIfNeeded):
+ (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):
+
+ LayoutTests:
+
+ * TestExpectations:
+ * platform/ios-14/TestExpectations:
+ * platform/ios/TestExpectations:
+ * platform/mac/TestExpectations:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@282634 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-09-16 Cameron McCormack <[email protected]>
+
+ Preserve canvas color space when producing JPEGs from toDataURL/toBlob
+ https://bugs.webkit.org/show_bug.cgi?id=230209
+ <rdar://82948457>
+
+ Reviewed by Sam Weinig.
+
+ * TestExpectations:
+ * platform/ios-14/TestExpectations:
+ * platform/ios/TestExpectations:
+ * platform/mac/TestExpectations:
+
+2021-10-08 Russell Epstein <[email protected]>
+
Cherry-pick r282626. rdar://problem/83956767
Support drawImage with a wide gamut image painting into a display-p3 canvas
Modified: branches/safari-612-branch/LayoutTests/TestExpectations (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/TestExpectations 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/TestExpectations 2021-10-08 19:44:23 UTC (rev 283827)
@@ -5116,6 +5116,7 @@
# display-p3 canvas and ImageData are Cocoa only for now.
imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html [ Failure ]
imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html [ Failure ]
+imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html [ Failure ]
webkit.org/b/226942 imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html [ Pass Failure ]
Modified: branches/safari-612-branch/LayoutTests/imported/w3c/ChangeLog (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/imported/w3c/ChangeLog 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/ChangeLog 2021-10-08 19:44:23 UTC (rev 283827)
@@ -1,5 +1,57 @@
2021-10-08 Russell Epstein <[email protected]>
+ Cherry-pick r282634. rdar://problem/83957287
+
+ Preserve canvas color space when producing JPEGs from toDataURL/toBlob
+ https://bugs.webkit.org/show_bug.cgi?id=230209
+ <rdar://82948457>
+
+ Reviewed by Sam Weinig.
+
+ LayoutTests/imported/w3c:
+
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas-expected.txt: Added.
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html: Copied from LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html.
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas-expected.txt:
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html:
+ * web-platform-tests/html/canvas/tools/yaml/element/color_space.yaml:
+
+ Source/WebCore:
+
+ Test: imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html
+
+ * platform/graphics/cg/ImageBufferCGBackend.cpp:
+ (WebCore::colorSpaceForBitmap): Return an appropriate color space for
+ performing any graphics operations on ImageBuffers (such as scaling or
+ cropping, or compositing on top of solid colors) becore encoding.
+ (WebCore::createBitmapImageAfterScalingIfNeeded):
+ (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):
+
+ LayoutTests:
+
+ * TestExpectations:
+ * platform/ios-14/TestExpectations:
+ * platform/ios/TestExpectations:
+ * platform/mac/TestExpectations:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@282634 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-09-16 Cameron McCormack <[email protected]>
+
+ Preserve canvas color space when producing JPEGs from toDataURL/toBlob
+ https://bugs.webkit.org/show_bug.cgi?id=230209
+ <rdar://82948457>
+
+ Reviewed by Sam Weinig.
+
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas-expected.txt: Added.
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html: Copied from LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html.
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas-expected.txt:
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html:
+ * web-platform-tests/html/canvas/tools/yaml/element/color_space.yaml:
+
+2021-10-08 Russell Epstein <[email protected]>
+
Cherry-pick r282626. rdar://problem/83956767
Support drawImage with a wide gamut image painting into a display-p3 canvas
Added: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas-expected.txt (0 => 283827)
--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas-expected.txt (rev 0)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas-expected.txt 2021-10-08 19:44:23 UTC (rev 283827)
@@ -0,0 +1,6 @@
+2d.color.space.p3.toDataURL.jpeg.p3.canvas
+test if toDataURL('image/jpeg') returns p3 data from canvas with p3 color space
+Actual output:
+
+PASS test if toDataURL('image/jpeg') returns p3 data from canvas with p3 color space
+
Copied: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html (from rev 283826, branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html) (0 => 283827)
--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html (rev 0)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html 2021-10-08 19:44:23 UTC (rev 283827)
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
+<title>Canvas test: 2d.color.space.p3.toDataURL.jpeg.p3.canvas</title>
+<script src=""
+<script src=""
+<script src=""
+<link rel="stylesheet" href=""
+<body class="show_output">
+
+<h1>2d.color.space.p3.toDataURL.jpeg.p3.canvas</h1>
+<p class="desc">test if toDataURL('image/jpeg') returns p3 data from canvas with p3 color space</p>
+
+
+<p class="output">Actual output:</p>
+<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
+
+<ul id="d"></ul>
+<script>
+var t = async_test("test if toDataURL('image/jpeg') returns p3 data from canvas with p3 color space");
+_addTest(function(canvas, ctx) {
+
+ctx.fillStyle = "rgba(155, 27, 27, 1)";
+ctx.fillRect(0, 0, 1, 1);
+ctx.fillStyle = "rgba(27, 155, 27, 0)";
+ctx.fillRect(1, 0, 1, 1);
+ctx.fillStyle = "rgba(27, 27, 155, 0.5)";
+ctx.fillRect(0, 1, 1, 1);
+ctx.fillStyle = "rgba(27, 27, 27, 0.5)";
+ctx.fillRect(1, 1, 1, 1);
+expectedPixels = ctx.getImageData(0, 0, 2, 2, {colorSpace: "display-p3"}).data;
+
+var image = new Image();
+image._onload_ = t.step_func_done(function() {
+ var dstCanvas = document.createElement("canvas");
+ dstCanvas.width = 2;
+ dstCanvas.height = 2;
+ var ctx = dstCanvas.getContext('2d', {colorSpace: "display-p3"});
+ ctx.drawImage(image, 0, 0);
+ var actualPixels = ctx.getImageData(0, 0, 2, 2, {colorSpace: "display-p3"}).data;
+ assert_array_approx_equals(actualPixels, expectedPixels, 2);
+});
+image.src = ""
+
+
+}, {colorSpace: "display-p3"});
+</script>
+
Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas-expected.txt (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas-expected.txt 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas-expected.txt 2021-10-08 19:44:23 UTC (rev 283827)
@@ -1,6 +1,6 @@
2d.color.space.p3.toDataURL.p3.canvas
-test if toblob returns p3 data from canvas with p3 color space
+test if toDataURL returns p3 data from canvas with p3 color space
Actual output:
-PASS test if toblob returns p3 data from canvas with p3 color space
+PASS test if toDataURL returns p3 data from canvas with p3 color space
Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html 2021-10-08 19:44:23 UTC (rev 283827)
@@ -8,7 +8,7 @@
<body class="show_output">
<h1>2d.color.space.p3.toDataURL.p3.canvas</h1>
-<p class="desc">test if toblob returns p3 data from canvas with p3 color space</p>
+<p class="desc">test if toDataURL returns p3 data from canvas with p3 color space</p>
<p class="output">Actual output:</p>
@@ -16,7 +16,7 @@
<ul id="d"></ul>
<script>
-var t = async_test("test if toblob returns p3 data from canvas with p3 color space");
+var t = async_test("test if toDataURL returns p3 data from canvas with p3 color space");
_addTest(function(canvas, ctx) {
ctx.fillStyle = "rgba(155, 27, 27, 1)";
Modified: branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/tools/yaml/element/color_space.yaml (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/tools/yaml/element/color_space.yaml 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/imported/w3c/web-platform-tests/html/canvas/tools/yaml/element/color_space.yaml 2021-10-08 19:44:23 UTC (rev 283827)
@@ -75,7 +75,7 @@
- name: 2d.color.space.p3.toDataURL.p3.canvas
testing:
- 2d.color.space.p3.and.uint8
- desc: test if toblob returns p3 data from canvas with p3 color space
+ desc: test if toDataURL returns p3 data from canvas with p3 color space
attributes: |
{colorSpace: "display-p3"}
code: |
@@ -101,6 +101,35 @@
});
image.src = ""
+- name: 2d.color.space.p3.toDataURL.jpeg.p3.canvas
+ testing:
+ - 2d.color.space.p3.and.uint8
+ desc: test if toDataURL('image/jpeg') returns p3 data from canvas with p3 color space
+ attributes: |
+ {colorSpace: "display-p3"}
+ code: |
+ ctx.fillStyle = "rgba(155, 27, 27, 1)";
+ ctx.fillRect(0, 0, 1, 1);
+ ctx.fillStyle = "rgba(27, 155, 27, 0)";
+ ctx.fillRect(1, 0, 1, 1);
+ ctx.fillStyle = "rgba(27, 27, 155, 0.5)";
+ ctx.fillRect(0, 1, 1, 1);
+ ctx.fillStyle = "rgba(27, 27, 27, 0.5)";
+ ctx.fillRect(1, 1, 1, 1);
+ expectedPixels = ctx.getImageData(0, 0, 2, 2, {colorSpace: "display-p3"}).data;
+
+ var image = new Image();
+ image._onload_ = t.step_func_done(function() {
+ var dstCanvas = document.createElement("canvas");
+ dstCanvas.width = 2;
+ dstCanvas.height = 2;
+ var ctx = dstCanvas.getContext('2d', {colorSpace: "display-p3"});
+ ctx.drawImage(image, 0, 0);
+ var actualPixels = ctx.getImageData(0, 0, 2, 2, {colorSpace: "display-p3"}).data;
+ assert_array_approx_equals(actualPixels, expectedPixels, 2);
+ });
+ image.src = ""
+
- name: 2d.color.space.p3.toBlob.with.putImageData
testing:
- 2d.color.space.p3.and.uint8
Modified: branches/safari-612-branch/LayoutTests/platform/ios/TestExpectations (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/platform/ios/TestExpectations 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/platform/ios/TestExpectations 2021-10-08 19:44:23 UTC (rev 283827)
@@ -3478,3 +3478,4 @@
# display-p3 canvas and ImageData are Cocoa only for now.
imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html [ Pass ]
imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html [ Pass ]
+imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html [ Pass ]
Modified: branches/safari-612-branch/LayoutTests/platform/ios-14/TestExpectations (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/platform/ios-14/TestExpectations 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/platform/ios-14/TestExpectations 2021-10-08 19:44:23 UTC (rev 283827)
@@ -96,6 +96,7 @@
# display-p3 canvas and ImageData are iOS 15+.
imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html [ Failure ]
imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html [ Failure ]
+imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html [ Failure ]
# rdar://79084756 ((r278618) media/modern-media-controls /overflow-support/chapters.html is timing out since introduction (226828))
media/modern-media-controls/overflow-support/chapters.html [ Pass ]
Modified: branches/safari-612-branch/LayoutTests/platform/mac/TestExpectations (283826 => 283827)
--- branches/safari-612-branch/LayoutTests/platform/mac/TestExpectations 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/LayoutTests/platform/mac/TestExpectations 2021-10-08 19:44:23 UTC (rev 283827)
@@ -2327,3 +2327,4 @@
# display-p3 canvas and ImageData are Cocoa only for now.
[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-drawImage.html [ Pass ]
[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/manual/wide-gamut-canvas/canvas-display-p3-settings.html [ Pass ]
+[ Monterey+ ] imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html [ Pass ]
Modified: branches/safari-612-branch/Source/WebCore/ChangeLog (283826 => 283827)
--- branches/safari-612-branch/Source/WebCore/ChangeLog 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/Source/WebCore/ChangeLog 2021-10-08 19:44:23 UTC (rev 283827)
@@ -1,5 +1,60 @@
2021-10-08 Russell Epstein <[email protected]>
+ Cherry-pick r282634. rdar://problem/83957287
+
+ Preserve canvas color space when producing JPEGs from toDataURL/toBlob
+ https://bugs.webkit.org/show_bug.cgi?id=230209
+ <rdar://82948457>
+
+ Reviewed by Sam Weinig.
+
+ LayoutTests/imported/w3c:
+
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas-expected.txt: Added.
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html: Copied from LayoutTests/imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html.
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas-expected.txt:
+ * web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.p3.canvas.html:
+ * web-platform-tests/html/canvas/tools/yaml/element/color_space.yaml:
+
+ Source/WebCore:
+
+ Test: imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html
+
+ * platform/graphics/cg/ImageBufferCGBackend.cpp:
+ (WebCore::colorSpaceForBitmap): Return an appropriate color space for
+ performing any graphics operations on ImageBuffers (such as scaling or
+ cropping, or compositing on top of solid colors) becore encoding.
+ (WebCore::createBitmapImageAfterScalingIfNeeded):
+ (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):
+
+ LayoutTests:
+
+ * TestExpectations:
+ * platform/ios-14/TestExpectations:
+ * platform/ios/TestExpectations:
+ * platform/mac/TestExpectations:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@282634 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-09-16 Cameron McCormack <[email protected]>
+
+ Preserve canvas color space when producing JPEGs from toDataURL/toBlob
+ https://bugs.webkit.org/show_bug.cgi?id=230209
+ <rdar://82948457>
+
+ Reviewed by Sam Weinig.
+
+ Test: imported/w3c/web-platform-tests/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.toDataURL.jpeg.p3.canvas.html
+
+ * platform/graphics/cg/ImageBufferCGBackend.cpp:
+ (WebCore::colorSpaceForBitmap): Return an appropriate color space for
+ performing any graphics operations on ImageBuffers (such as scaling or
+ cropping, or compositing on top of solid colors) becore encoding.
+ (WebCore::createBitmapImageAfterScalingIfNeeded):
+ (WebCore::ImageBufferCGBackend::copyCGImageForEncoding const):
+
+2021-10-08 Russell Epstein <[email protected]>
+
Cherry-pick r282626. rdar://problem/83956767
Support drawImage with a wide gamut image painting into a display-p3 canvas
Modified: branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp (283826 => 283827)
--- branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp 2021-10-08 19:44:16 UTC (rev 283826)
+++ branches/safari-612-branch/Source/WebCore/platform/graphics/cg/ImageBufferCGBackend.cpp 2021-10-08 19:44:23 UTC (rev 283827)
@@ -93,6 +93,13 @@
return image;
}
+static CGColorSpaceRef colorSpaceForBitmap(DestinationColorSpace imageBufferColorSpace)
+{
+ if (CGColorSpaceGetModel(imageBufferColorSpace.platformColorSpace()) != kCGColorSpaceModelRGB)
+ return sRGBColorSpaceRef();
+ return imageBufferColorSpace.platformColorSpace();
+}
+
static RefPtr<Image> createBitmapImageAfterScalingIfNeeded(RefPtr<NativeImage>&& image, const IntSize& logicalSize, const IntSize& backendSize, float resolutionScale, PreserveResolution preserveResolution)
{
if (!image)
@@ -101,7 +108,7 @@
if (resolutionScale == 1 || preserveResolution == PreserveResolution::Yes)
image = NativeImage::create(createCroppedImageIfNecessary(image->platformImage().get(), backendSize));
else {
- auto context = adoptCF(CGBitmapContextCreate(0, logicalSize.width(), logicalSize.height(), 8, 4 * logicalSize.width(), sRGBColorSpaceRef(), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
+ auto context = adoptCF(CGBitmapContextCreate(0, logicalSize.width(), logicalSize.height(), 8, 4 * logicalSize.width(), colorSpaceForBitmap(image->colorSpace()), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
CGContextSetBlendMode(context.get(), kCGBlendModeCopy);
CGContextClipToRect(context.get(), FloatRect(FloatPoint::zero(), logicalSize));
FloatSize imageSizeInUserSpace = logicalSize;
@@ -177,7 +184,7 @@
// FIXME: Should this be using the same logic as ImageBufferUtilitiesCG?
// JPEGs don't have an alpha channel, so we have to manually composite on top of black.
- PixelBufferFormat format { AlphaPremultiplication::Premultiplied, PixelFormat::RGBA8, DestinationColorSpace::SRGB() };
+ PixelBufferFormat format { AlphaPremultiplication::Premultiplied, PixelFormat::RGBA8, DestinationColorSpace(colorSpaceForBitmap(colorSpace())) };
auto pixelBuffer = getPixelBuffer(format, logicalRect());
if (!pixelBuffer)
return nullptr;
@@ -209,7 +216,7 @@
if (!nativeImage)
return nullptr;
auto image = nativeImage->platformImage();
- auto context = adoptCF(CGBitmapContextCreate(0, backendSize().width(), backendSize().height(), 8, 4 * backendSize().width(), sRGBColorSpaceRef(), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
+ auto context = adoptCF(CGBitmapContextCreate(0, backendSize().width(), backendSize().height(), 8, 4 * backendSize().width(), colorSpaceForBitmap(colorSpace()), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host));
CGContextSetBlendMode(context.get(), kCGBlendModeCopy);
CGContextClipToRect(context.get(), CGRectMake(0, 0, backendSize().width(), backendSize().height()));
CGContextDrawImage(context.get(), CGRectMake(0, 0, backendSize().width(), backendSize().height()), image.get());