Chromium Code Reviews| Index: tools/viewer/ImageSlide.cpp |
| diff --git a/tools/viewer/ImageSlide.cpp b/tools/viewer/ImageSlide.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3bf133c0ed770d293183adec4471ff38d986afb5 |
| --- /dev/null |
| +++ b/tools/viewer/ImageSlide.cpp |
| @@ -0,0 +1,55 @@ |
| +/* |
| +* Copyright 2016 Google Inc. |
| +* |
| +* Use of this source code is governed by a BSD-style license that can be |
| +* found in the LICENSE file. |
| +*/ |
| + |
| +#include "ImageSlide.h" |
| + |
| +#include "SkBitmap.h" |
| +#include "SkCodec.h" |
| +#include "SkColorSpaceXform.h" |
| +#include "SkColorSpace.h" |
| +#include "SkCanvas.h" |
| +#include "SkData.h" |
| +#include "SkImage.h" |
| +#include "SkMetaData.h" |
| + |
| +ImageSlide::ImageSlide(const SkString& name, const SkString& path) : fPath(path) { |
| + fName = name; |
| +} |
| + |
| +SkISize ImageSlide::getDimensions() const { |
| + return fImage ? fImage->dimensions() : SkISize::Make(0, 0); |
| +} |
| + |
| +void ImageSlide::draw(SkCanvas* canvas) { |
| + if (canvas->getMetaData().hasBool(kImageColorXformMetaData, true)) { |
| + canvas->drawBitmap(fXformedBitmap, 0, 0); |
| + } else { |
| + // canvas->drawImage(fImage.get(), 0, 0); // drawImage is currently having bugs |
|
msarett
2016/06/13 14:56:26
I would say go ahead and file a bug. That way the
liyuqian
2016/06/13 16:10:40
Done.
|
| + canvas->drawBitmap(fOriginalBitmap, 0, 0); |
| + } |
| +} |
| + |
| +void ImageSlide::load() { |
| + sk_sp<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
|
msarett
2016/06/13 14:56:26
nit:
sk_sp<SkData> encoded = SkData::NewFromFileN
liyuqian
2016/06/13 16:10:40
no viable conversion from 'SkData *' to 'sk_sp<SkD
msarett
2016/06/13 16:57:35
Ahh sorry! You should use SkData::MakeFromFileNam
liyuqian
2016/06/13 19:02:29
Done.
|
| + 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->getColorSpace()); |
| + sk_sp<SkColorSpace> dstSpace = SkColorSpace::NewNamed(SkColorSpace::kAdobeRGB_Named); |
| + std::unique_ptr<SkColorSpaceXform> xform = SkColorSpaceXform::New(srcSpace, dstSpace); |
| + fImage->asLegacyBitmap(&fXformedBitmap, SkImage::kRW_LegacyBitmapMode); |
|
msarett
2016/06/13 14:56:26
nit: I believe that MakeFromEncoded() is lazy, mea
liyuqian
2016/06/13 16:10:40
Done.
|
| + uint32_t* row = (uint32_t*) fXformedBitmap.getPixels(); |
| + for (int y = 0; y < fXformedBitmap.height(); y++) { |
| + xform->xform_RGBA_8888(row, row, fXformedBitmap.width()); |
| + row = SkTAddOffset<uint32_t>(row, fXformedBitmap.rowBytes()); |
| + } |
| +} |
| + |
| +void ImageSlide::unload() { |
| + fImage.reset(nullptr); |
| +} |