diff options
author | 2016-07-29 06:23:33 -0700 | |
---|---|---|
committer | 2016-07-29 06:23:33 -0700 | |
commit | 50ce1f28ffede3fa3e38d330d4114ee52b387848 (patch) | |
tree | ed3baa4c7463f1b46ac59bdee93df65c3eb82e97 /tools/viewer/ImageSlide.cpp | |
parent | 830c913625ac62b16b09cc0f1dbd8f177ec493d9 (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
Committed: https://skia.googlesource.com/skia/+/73d55332e2846dd05e9efdaa2f017bcc3872884b
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() { |