SkColorSpaceXformCanvas: Use when drawing picture images
The new code path is triggered by SkImage::makeColorSpace() when the image is picture backed. Fixes 3 gms in gbr-8888 config. Bug: skia:6516 Change-Id: I397903eb0f926834efd277f30265339518777920 Reviewed-on: https://skia-review.googlesource.com/14034 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Matt Sarett <msarett@google.com>
This commit is contained in:
parent
54cbcd7056
commit
71f9df224e
@ -7,6 +7,7 @@
|
||||
|
||||
#include "SkImage_Base.h"
|
||||
#include "SkCanvas.h"
|
||||
#include "SkColorSpaceXformCanvas.h"
|
||||
#include "SkMakeUnique.h"
|
||||
#include "SkMatrix.h"
|
||||
#include "SkPaint.h"
|
||||
@ -69,6 +70,25 @@ bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
|
||||
const Options& opts) {
|
||||
// No need to use the xform canvas if we want fully color correct behavior or if we do not
|
||||
// have a destination color space.
|
||||
if (SkTransferFunctionBehavior::kRespect == opts.fBehavior || !info.colorSpace()) {
|
||||
return this->onGetPixels(info, pixels, rowBytes, opts.fColorTable, opts.fColorTableCount);
|
||||
}
|
||||
|
||||
auto canvas = SkCanvas::MakeRasterDirect(info.makeColorSpace(nullptr), pixels, rowBytes);
|
||||
if (!canvas) {
|
||||
return false;
|
||||
}
|
||||
canvas->clear(0);
|
||||
|
||||
auto xformCanvas = SkCreateColorSpaceXformCanvas(canvas.get(), info.refColorSpace());
|
||||
xformCanvas->drawPicture(fPicture, &fMatrix, fPaint.getMaybeNull());
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::unique_ptr<SkImageGenerator>
|
||||
|
@ -19,6 +19,8 @@ public:
|
||||
protected:
|
||||
bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[],
|
||||
int* ctableCount) override;
|
||||
bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options& opts)
|
||||
override;
|
||||
|
||||
#if SK_SUPPORT_GPU
|
||||
sk_sp<GrTextureProxy> onGenerateTexture(GrContext*, const SkImageInfo&,
|
||||
|
Loading…
Reference in New Issue
Block a user