Chromium Code Reviews| Index: third_party/WebKit/Source/core/frame/ImageBitmap.cpp |
| diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp |
| index feaa25995291526cdc0937ba73b09dacdba9bd2e..560a03b8393d4baaf59fe7ef4d4eff4f61d1827a 100644 |
| --- a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp |
| +++ b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp |
| @@ -610,7 +610,7 @@ ImageBitmap::ImageBitmap(HTMLVideoElement* video, |
| std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create( |
| IntSize(parsedOptions.resizeWidth, parsedOptions.resizeHeight), NonOpaque, |
| - DoNotInitializeImagePixels); |
| + DoNotInitializeImagePixels, parsedOptions.dstColorSpace); |
| if (!buffer) |
| return; |
| @@ -687,6 +687,8 @@ ImageBitmap::ImageBitmap(HTMLCanvasElement* canvas, |
| m_image->setPremultiplied(parsedOptions.premultiplyAlpha); |
| } |
| +// TODO(zakerinasab): Support color space conversion in this constructor when |
| +// the new serialization module is ready. crbug.com/670703 |
| ImageBitmap::ImageBitmap(const void* pixelData, |
| uint32_t width, |
| uint32_t height, |
| @@ -706,9 +708,11 @@ ImageBitmap::ImageBitmap(const void* pixelData, |
| static sk_sp<SkImage> scaleSkImage(sk_sp<SkImage> skImage, |
| unsigned resizeWidth, |
| unsigned resizeHeight, |
| - SkFilterQuality resizeQuality) { |
| + SkFilterQuality resizeQuality, |
| + SkColorType colorType = kN32_SkColorType, |
| + sk_sp<SkColorSpace> colorSpace = nullptr) { |
| SkImageInfo resizedInfo = SkImageInfo::Make( |
| - resizeWidth, resizeHeight, kN32_SkColorType, kUnpremul_SkAlphaType); |
| + resizeWidth, resizeHeight, colorType, kUnpremul_SkAlphaType, colorSpace); |
| RefPtr<ArrayBuffer> dstBuffer = ArrayBuffer::createOrNull( |
| resizeWidth * resizeHeight, resizedInfo.bytesPerPixel()); |
| if (!dstBuffer) |
| @@ -726,6 +730,8 @@ static sk_sp<SkImage> scaleSkImage(sk_sp<SkImage> skImage, |
| resizedPixels.release().leakRef()); |
| } |
| +// TODO(zakerinasab): Add color space conversion to this constructor when |
| +// ImageData supports color spaces. crbug.com/670715. |
|
Justin Novosad
2016/12/14 20:53:46
It seems this constructor is now in a half fixed s
zakerinasab1
2016/12/16 20:25:34
No, but it can be if we pass the color space param
|
| ImageBitmap::ImageBitmap(ImageData* data, |
| Optional<IntRect> cropRect, |
| const ImageBitmapOptions& options) { |
| @@ -991,13 +997,23 @@ ImageBitmap* ImageBitmap::take(ScriptPromiseResolver*, sk_sp<SkImage> image) { |
| PassRefPtr<Uint8Array> ImageBitmap::copyBitmapData(AlphaDisposition alphaOp, |
| DataColorFormat format) { |
| - SkImageInfo info = SkImageInfo::Make( |
| - width(), height(), |
| - (format == RGBAColorType) ? kRGBA_8888_SkColorType : kN32_SkColorType, |
| - (alphaOp == PremultiplyAlpha) ? kPremul_SkAlphaType |
| - : kUnpremul_SkAlphaType); |
| - // TODO(ccameron): Canvas should operate in sRGB and not display space. |
| - // https://crbug.com/667431 |
| + SkColorType colorType = kRGBA_8888_SkColorType; |
| + if (format == N32ColorType) |
| + colorType = kN32_SkColorType; |
| + else if (format == F16ColorType) |
| + colorType = kRGBA_F16_SkColorType; |
| + |
| + // TODO(zakerinasab): Fix this to use the SkColorSpace from |
| + // m_image->imageForCurrentFrame() instead of nullptr. crbug.com/671356. |
| + sk_sp<SkColorSpace> colorSpace = nullptr; |
| + SkImageInfo info = |
| + SkImageInfo::Make(width(), height(), colorType, |
| + (alphaOp == PremultiplyAlpha) ? kPremul_SkAlphaType |
| + : kUnpremul_SkAlphaType, |
| + colorSpace); |
| + // TODO(zakerinasab): Bitmap data must be returned in the current color space |
|
Justin Novosad
2016/12/14 20:53:46
Note: This will require making StaticBitmapImage a
zakerinasab1
2016/12/16 20:25:34
I added your comments to the TODO to be considered
|
| + // of the ImageBitmap and not display space. crbug.com/671356. |
| + // When this is fixed, also fix ShapeDetector::detect(...). |
| RefPtr<Uint8Array> dstPixels = copySkImageData( |
| m_image->imageForCurrentFrame(ColorBehavior::transformToGlobalTarget()) |
| .get(), |