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
diff --git a/tools/viewer/ImageSlide.cpp b/tools/viewer/ImageSlide.cpp
index b047154..7dcee5d 100644
--- a/tools/viewer/ImageSlide.cpp
+++ b/tools/viewer/ImageSlide.cpp
@@ -37,20 +37,18 @@
 
 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() {