From a50205fca5f7cff36dd3adac841b4c23a90a0b7d Mon Sep 17 00:00:00 2001 From: Brian Osman Date: Fri, 6 Jul 2018 13:57:01 -0400 Subject: Add color type to the image filter DAG's OutputProperties Don't try to guess the pixel config to use for intermediates. Instead, just make the intermediates in the same color type (and space) as the final destination. This removes some no-longer-correct logic that was using sRGB configs, resulting in linear blending and precision loss. Change-Id: I627c47193a9f2889c3dc121170ff3e7d5d315fa0 Reviewed-on: https://skia-review.googlesource.com/139547 Reviewed-by: Mike Klein Commit-Queue: Brian Osman --- src/image/SkImage.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/image') diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index 43c4cbaa39..128e693ad2 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -256,6 +256,7 @@ sk_sp SkImage::makeWithFilter(const SkImageFilter* filter, const SkIRec if (!filter || !outSubset || !offset || !this->bounds().contains(subset)) { return nullptr; } + SkColorType colorType = as_IB(this)->onImageInfo().colorType(); SkColorSpace* colorSpace = as_IB(this)->onImageInfo().colorSpace(); sk_sp srcSpecialImage = SkSpecialImage::MakeFromImage( subset, sk_ref_sp(const_cast(this)), colorSpace); @@ -265,7 +266,7 @@ sk_sp SkImage::makeWithFilter(const SkImageFilter* filter, const SkIRec sk_sp cache( SkImageFilterCache::Create(SkImageFilterCache::kDefaultTransientSize)); - SkImageFilter::OutputProperties outputProperties(colorSpace); + SkImageFilter::OutputProperties outputProperties(colorType, colorSpace); SkImageFilter::Context context(SkMatrix::I(), clipBounds, cache.get(), outputProperties); sk_sp result = filter->filterImage(srcSpecialImage.get(), context, offset); -- cgit v1.2.3