aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-04-05 11:41:27 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-05 16:17:15 +0000
commitcb87423cffb22467033a9e4f932399fb970faab6 (patch)
treec923cbbd1f368f83e506d377aee8622d77f66c10 /src
parent944feea3d345616d62750faba6875a35c8d6712b (diff)
Add SkImage::makeColorSpace() to public API
Gives Chrome the flexibility to xform and cache SkImages before they reach the SkColorSpaceXformCanvas. Bug: skia: Change-Id: I1f188f385b953b5a958c15578ea66deffb4dc6c5 Reviewed-on: https://skia-review.googlesource.com/11290 Commit-Queue: Matt Sarett <msarett@google.com> Reviewed-by: Mike Klein <mtklein@chromium.org> Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/SkColorSpaceXformer.cpp4
-rw-r--r--src/image/SkImage.cpp15
-rw-r--r--src/image/SkImage_Base.h9
3 files changed, 14 insertions, 14 deletions
diff --git a/src/core/SkColorSpaceXformer.cpp b/src/core/SkColorSpaceXformer.cpp
index 4d93fae327..8a83dbc3ce 100644
--- a/src/core/SkColorSpaceXformer.cpp
+++ b/src/core/SkColorSpaceXformer.cpp
@@ -28,7 +28,7 @@ std::unique_ptr<SkColorSpaceXformer> SkColorSpaceXformer::Make(sk_sp<SkColorSpac
}
sk_sp<SkImage> SkColorSpaceXformer::apply(const SkImage* src) {
- return as_IB(src)->makeColorSpace(fDst);
+ return src->makeColorSpace(fDst, SkTransferFunctionBehavior::kIgnore);
}
sk_sp<SkImage> SkColorSpaceXformer::apply(const SkBitmap& src) {
@@ -37,7 +37,7 @@ sk_sp<SkImage> SkColorSpaceXformer::apply(const SkBitmap& src) {
return nullptr;
}
- sk_sp<SkImage> xformed = as_IB(image)->makeColorSpace(fDst);
+ sk_sp<SkImage> xformed = image->makeColorSpace(fDst, SkTransferFunctionBehavior::kIgnore);
// We want to be sure we don't let the kNever_SkCopyPixelsMode image escape this stack frame.
SkASSERT(xformed != image);
return xformed;
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index e45bbd7cf3..0847eb1c57 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -302,7 +302,13 @@ bool SkImage::isAlphaOnly() const {
return as_IB(this)->onImageInfo().colorType() == kAlpha_8_SkColorType;
}
-sk_sp<SkImage> SkImage_Base::makeColorSpace(sk_sp<SkColorSpace> target) const {
+sk_sp<SkImage> SkImage::makeColorSpace(sk_sp<SkColorSpace> target,
+ SkTransferFunctionBehavior premulBehavior) const {
+ if (SkTransferFunctionBehavior::kRespect == premulBehavior) {
+ // TODO (msarett, brianosman): Implement this.
+ return nullptr;
+ }
+
SkColorSpaceTransferFn fn;
if (!target || !target->isNumericalTransferFn(&fn)) {
return nullptr;
@@ -313,11 +319,12 @@ sk_sp<SkImage> SkImage_Base::makeColorSpace(sk_sp<SkColorSpace> target) const {
// (2) The color type is kAlpha8.
if ((!this->colorSpace() && target->isSRGB()) ||
SkColorSpace::Equals(this->colorSpace(), target.get()) ||
- kAlpha_8_SkColorType == this->onImageInfo().colorType()) {
- return sk_ref_sp(const_cast<SkImage_Base*>(this));
+ kAlpha_8_SkColorType == as_IB(this)->onImageInfo().colorType()) {
+ return sk_ref_sp(const_cast<SkImage*>(this));
}
- return this->onMakeColorSpace(std::move(target));
+ // TODO: We might consider making this a deferred conversion?
+ return as_IB(this)->onMakeColorSpace(std::move(target));
}
//////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/image/SkImage_Base.h b/src/image/SkImage_Base.h
index 5bdf9403e5..062d785679 100644
--- a/src/image/SkImage_Base.h
+++ b/src/image/SkImage_Base.h
@@ -86,17 +86,10 @@ public:
fAddedToCache.store(true);
}
- // Transforms image into the input color space.
- sk_sp<SkImage> makeColorSpace(sk_sp<SkColorSpace> target) const;
-
virtual bool onPinAsTexture(GrContext*) const { return false; }
virtual void onUnpinAsTexture(GrContext*) const {}
-protected:
- virtual sk_sp<SkImage> onMakeColorSpace(sk_sp<SkColorSpace>) const {
- // TODO: Make this pure virtual.
- return sk_ref_sp(const_cast<SkImage_Base*>(this));
- }
+ virtual sk_sp<SkImage> onMakeColorSpace(sk_sp<SkColorSpace>) const = 0;
private:
// Set true by caches when they cache content that's derived from the current pixels.