From 3949971e8d29345ee89461aec1ef25734ffc03f5 Mon Sep 17 00:00:00 2001 From: senorblanco Date: Wed, 18 May 2016 07:00:08 -0700 Subject: Image filters: fix filtering of transparent black in CFIF. SkColorFilterImageFilter has a codepath to filter transparent black regions outside of the input image. However, it was treating the exterior as opaque black, rather than trasparent black. Note: the results of imagefiltercropexpand GM will change, as it was tweaked a bit to show this bug. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1978363002 NOTREECHECKS=true NOTRY=true NOPRESUBMIT=true Review-Url: https://codereview.chromium.org/1978363002 --- gm/imagefilterscropexpand.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'gm') diff --git a/gm/imagefilterscropexpand.cpp b/gm/imagefilterscropexpand.cpp index 4ce845d9ee..9b9f7ee817 100644 --- a/gm/imagefilterscropexpand.cpp +++ b/gm/imagefilterscropexpand.cpp @@ -50,11 +50,13 @@ protected: sk_sp gradientCircleSource(SkImageSource::Make(std::move(gradientCircle))); sk_sp noopCropped(SkOffsetImageFilter::Make(0, 0, nullptr, &cropRect)); - SkScalar sk255 = SkIntToScalar(255); + // This color matrix saturates the green component but only partly increases the opacity. + // For the opaque checkerboard, the opacity boost doesn't matter but it does impact the + // area outside the checkerboard. SkScalar matrix[20] = { 1, 0, 0, 0, 0, - 0, 1, 0, 0, sk255, + 0, 1, 0, 0, 255, 0, 0, 1, 0, 0, - 0, 0, 0, 0, sk255 }; + 0, 0, 0, 1, 32 }; sk_sp cfAlphaTrans(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); -- cgit v1.2.3