diff options
author | msarett <msarett@google.com> | 2016-07-28 15:06:16 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-07-28 15:06:16 -0700 |
commit | 73d55332e2846dd05e9efdaa2f017bcc3872884b (patch) | |
tree | 428d0b8aa1ef3fef3a2b3fa63cd1f66caf020324 /tools/viewer/ImageSlide.cpp | |
parent | 20c27d6d6f68b17ce230d0dabe434f63990c6843 (diff) |
Add color space xform support to SkJpegCodec (includes F16!)
Also changes SkColorXform to support:
RGBA->RGBA
RGBA->BGRA
Instead of:
RGBA->SkPMColor
TBR=reed@google.com
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2174493002
CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot
Review-Url: https://codereview.chromium.org/2174493002
Diffstat (limited to 'tools/viewer/ImageSlide.cpp')
-rw-r--r-- | tools/viewer/ImageSlide.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/tools/viewer/ImageSlide.cpp b/tools/viewer/ImageSlide.cpp index b0471547bc..7dcee5d5ac 100644 --- a/tools/viewer/ImageSlide.cpp +++ b/tools/viewer/ImageSlide.cpp @@ -37,20 +37,18 @@ void ImageSlide::draw(SkCanvas* canvas) { void ImageSlide::load(SkScalar, SkScalar) { sk_sp<SkData> encoded = SkData::MakeFromFileName(fPath.c_str()); - fImage = SkImage::MakeFromEncoded(encoded); - fImage->asLegacyBitmap(&fOriginalBitmap, SkImage::kRO_LegacyBitmapMode); - SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(encoded.get())); - sk_sp<SkColorSpace> srcSpace = sk_ref_sp(codec->getInfo().colorSpace()); - sk_sp<SkColorSpace> dstSpace = SkColorSpace::NewNamed(SkColorSpace::kAdobeRGB_Named); - std::unique_ptr<SkColorSpaceXform> xform = SkColorSpaceXform::New(srcSpace, dstSpace); - fOriginalBitmap.deepCopyTo(&fXformedBitmap); - uint32_t* row = (uint32_t*) fXformedBitmap.getPixels(); - for (int y = 0; y < fXformedBitmap.height(); y++) { - xform->applyTo8888(row, row, fXformedBitmap.width()); - row = SkTAddOffset<uint32_t>(row, fXformedBitmap.rowBytes()); + if (!codec) { + return; } - fXformedBitmap.notifyPixelsChanged(); // This is needed for the deepCopy + + fOriginalBitmap.allocPixels(codec->getInfo()); + codec->getPixels(codec->getInfo(), fOriginalBitmap.getPixels(), fOriginalBitmap.rowBytes()); + + SkImageInfo xformedInfo = codec->getInfo().makeColorSpace( + SkColorSpace::NewNamed(SkColorSpace::kAdobeRGB_Named)); + fXformedBitmap.allocPixels(xformedInfo); + codec->getPixels(xformedInfo, fXformedBitmap.getPixels(), fXformedBitmap.rowBytes()); } void ImageSlide::unload() { |