diff options
author | Brian Osman <brianosman@google.com> | 2017-01-17 16:10:07 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-17 21:53:57 +0000 |
commit | 0d4ff6c601f2ce404a97068718caad5a2bb3d594 (patch) | |
tree | be37c1e4b454893b7df99aa19585455b728560fc /src/image/SkImage.cpp | |
parent | 98420d0c9b5934d6b08ea994844476ddedd23de0 (diff) |
Fix code that relied on readPixels not doing color space conversion
SampleApp doesn't have (can't easily get) an image, so I couldn't use
the new helper function there. It's probably still worth having?
BUG=skia:
Change-Id: I60c208ff958076015a9539359921b9aff68f25c8
Reviewed-on: https://skia-review.googlesource.com/7129
Reviewed-by: Matt Sarett <msarett@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/image/SkImage.cpp')
-rw-r--r-- | src/image/SkImage.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index d2fc8456f3..86d1e195ce 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -409,3 +409,30 @@ void SkImage_unpinAsTexture(const SkImage* image, GrContext* ctx) { SkASSERT(ctx); as_IB(image)->onUnpinAsTexture(ctx); } + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +sk_sp<SkImage> SkImageMakeRasterCopyAndAssignColorSpace(const SkImage* src, + SkColorSpace* colorSpace) { + // Read the pixels out of the source image, with no conversion + SkImageInfo info = as_IB(src)->onImageInfo(); + if (kUnknown_SkColorType == info.colorType()) { + SkDEBUGFAIL("Unexpected color type"); + return nullptr; + } + + size_t rowBytes = info.minRowBytes(); + size_t size = info.getSafeSize(rowBytes); + auto data = SkData::MakeUninitialized(size); + if (!data) { + return nullptr; + } + + SkPixmap pm(info, data->writable_data(), rowBytes); + if (!src->readPixels(pm, 0, 0, SkImage::kDisallow_CachingHint)) { + return nullptr; + } + + // Wrap them in a new image with a different color space + return SkImage::MakeRasterData(info.makeColorSpace(sk_ref_sp(colorSpace)), data, rowBytes); +} |