aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/xform_image_gen.cpp48
-rw-r--r--gn/core.gni2
-rw-r--r--gn/gm.gni1
-rw-r--r--src/core/SkColorSpaceXformImageGenerator.cpp108
-rw-r--r--src/core/SkColorSpaceXformImageGenerator.h46
-rw-r--r--src/core/SkImagePriv.h13
-rw-r--r--src/image/SkImage_Raster.cpp30
-rw-r--r--tests/ImageGeneratorTest.cpp43
8 files changed, 0 insertions, 291 deletions
diff --git a/gm/xform_image_gen.cpp b/gm/xform_image_gen.cpp
deleted file mode 100644
index 69a1ce173f..0000000000
--- a/gm/xform_image_gen.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "gm.h"
-#include "SkColorSpaceXformImageGenerator.h"
-
-class ColorXformImageGenGM : public skiagm::GM {
-public:
- ColorXformImageGenGM() {}
-
-protected:
-
- SkString onShortName() override {
- return SkString("color_xform_image_gen");
- }
-
- SkISize onISize() override {
- return SkISize::Make(100, 100);
- }
-
- void onDraw(SkCanvas* canvas) override {
- SkBitmap bitmap;
- SkImageInfo info =
- SkImageInfo::MakeN32(100, 100, kOpaque_SkAlphaType, SkColorSpace::MakeSRGB());
- bitmap.allocPixels(info);
- bitmap.eraseColor(SK_ColorRED);
- bitmap.eraseArea(SkIRect::MakeWH(25, 25), SK_ColorBLUE); // We should not see any blue.
-
- std::unique_ptr<SkImageGenerator> gen = SkColorSpaceXformImageGenerator::Make(
- bitmap,
- SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma,
- SkColorSpace::kRec2020_Gamut),
- kNever_SkCopyPixelsMode);
-
- SkIRect subset = SkIRect::MakeXYWH(25, 25, 50, 50);
- sk_sp<SkImage> image = SkImage::MakeFromGenerator(std::move(gen), &subset);
- canvas->drawImage(image, 25, 25);
- }
-
-private:
- typedef GM INHERITED;
-};
-
-DEF_GM( return new ColorXformImageGenGM(); )
diff --git a/gn/core.gni b/gn/core.gni
index 8aa23c9eb0..d5daca8dac 100644
--- a/gn/core.gni
+++ b/gn/core.gni
@@ -85,8 +85,6 @@ skia_core_sources = [
"$_src/core/SkColorSpaceXformCanvas.cpp",
"$_src/core/SkColorSpaceXformer.cpp",
"$_src/core/SkColorSpaceXformer.h",
- "$_src/core/SkColorSpaceXformImageGenerator.cpp",
- "$_src/core/SkColorSpaceXformImageGenerator.h",
"$_src/core/SkColorSpaceXform_A2B.cpp",
"$_src/core/SkColorSpaceXform_A2B.h",
"$_src/core/SkColorTable.cpp",
diff --git a/gn/gm.gni b/gn/gm.gni
index a19d4074aa..1802b60703 100644
--- a/gn/gm.gni
+++ b/gn/gm.gni
@@ -335,6 +335,5 @@ gm_sources = [
"$_gm/xfermodes.cpp",
"$_gm/xfermodes2.cpp",
"$_gm/xfermodes3.cpp",
- "$_gm/xform_image_gen.cpp",
"$_gm/yuvtorgbeffect.cpp",
]
diff --git a/src/core/SkColorSpaceXformImageGenerator.cpp b/src/core/SkColorSpaceXformImageGenerator.cpp
deleted file mode 100644
index d0c91a312a..0000000000
--- a/src/core/SkColorSpaceXformImageGenerator.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkColorSpaceXformImageGenerator.h"
-
-std::unique_ptr<SkImageGenerator> SkColorSpaceXformImageGenerator::Make(
- const SkBitmap& src, sk_sp<SkColorSpace> dst, SkCopyPixelsMode mode) {
- return SkColorSpaceXformImageGenerator::Make(src, dst, mode, kNeedNewImageUniqueID);
-}
-
-std::unique_ptr<SkImageGenerator> SkColorSpaceXformImageGenerator::Make(
- const SkBitmap& src, sk_sp<SkColorSpace> dst, SkCopyPixelsMode mode, uint32_t id) {
- if (!dst) {
- return nullptr;
- }
-
- const SkBitmap* srcPtr = &src;
- SkBitmap copy;
- if (kAlways_SkCopyPixelsMode == mode ||
- (kNever_SkCopyPixelsMode != mode && !src.isImmutable())) {
- if (!copy.tryAllocPixels(src.info())) {
- return nullptr;
- }
-
- SkAssertResult(src.readPixels(copy.info(), copy.getPixels(), copy.rowBytes(), 0, 0));
- copy.setImmutable();
- srcPtr = &copy;
- }
-
- return std::unique_ptr<SkImageGenerator>(
- new SkColorSpaceXformImageGenerator(*srcPtr, std::move(dst), id));
-}
-
-SkColorSpaceXformImageGenerator::SkColorSpaceXformImageGenerator(const SkBitmap& src,
- sk_sp<SkColorSpace> dst,
- uint32_t id)
- : INHERITED(src.info().makeColorSpace(dst), id)
- , fSrc(src)
- , fDst(std::move(dst))
-{}
-
-bool SkColorSpaceXformImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels,
- size_t rowBytes, const Options& opts) {
- SkImageInfo dstInfo = info;
- if (!info.colorSpace()) {
- dstInfo = dstInfo.makeColorSpace(fDst);
- }
- return fSrc.readPixels(dstInfo, pixels, rowBytes, 0, 0, opts.fBehavior);
-}
-
-#if SK_SUPPORT_GPU
-
-#include "GrClip.h"
-#include "GrContext.h"
-#include "GrContextPriv.h"
-#include "GrPaint.h"
-#include "GrRenderTargetContext.h"
-#include "GrTextureProxy.h"
-#include "SkGr.h"
-#include "effects/GrNonlinearColorSpaceXformEffect.h"
-
-sk_sp<GrTextureProxy> SkColorSpaceXformImageGenerator::onGenerateTexture(
- GrContext* ctx, const SkImageInfo& info, const SkIPoint& origin,
- SkTransferFunctionBehavior, bool willNeedMipMaps) {
- // FIXME:
- // This always operates as if SkTranferFunctionBehavior is kIgnore. Should we add
- // options so that caller can also request kRespect?
-
- SkASSERT(ctx);
-
- sk_sp<GrTextureProxy> proxy = GrUploadBitmapToTextureProxy(ctx->contextPriv().proxyProvider(),
- fSrc, nullptr);
-
- if (!proxy) {
- return nullptr;
- }
-
- sk_sp<SkColorSpace> srcSpace =
- fSrc.colorSpace() ? sk_ref_sp(fSrc.colorSpace()) : SkColorSpace::MakeSRGB();
- auto xform = GrNonlinearColorSpaceXformEffect::Make(srcSpace.get(), fDst.get());
- if (!xform) {
- return nullptr;
- }
-
- GrMipMapped mipMapped = willNeedMipMaps ? GrMipMapped::kYes : GrMipMapped::kNo;
-
- sk_sp<GrRenderTargetContext> renderTargetContext = ctx->makeDeferredRenderTargetContext(
- SkBackingFit::kExact, info.width(), info.height(), kRGBA_8888_GrPixelConfig, nullptr,
- 0, mipMapped, kTopLeft_GrSurfaceOrigin);
- if (!renderTargetContext) {
- return nullptr;
- }
-
- GrPaint paint;
- paint.setPorterDuffXPFactory(SkBlendMode::kSrc);
- paint.addColorTextureProcessor(std::move(proxy), SkMatrix::MakeTrans(origin.fX, origin.fY));
- paint.addColorFragmentProcessor(std::move(xform));
-
- const SkRect rect = SkRect::MakeWH(info.width(), info.height());
- renderTargetContext->drawRect(GrNoClip(), std::move(paint), GrAA::kNo, SkMatrix::I(), rect);
- return sk_ref_sp(renderTargetContext->asTextureProxy());
-}
-
-#endif
diff --git a/src/core/SkColorSpaceXformImageGenerator.h b/src/core/SkColorSpaceXformImageGenerator.h
deleted file mode 100644
index 3fd6b94a23..0000000000
--- a/src/core/SkColorSpaceXformImageGenerator.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkColorSpaceXformImageGenerator_DEFINED
-#define SkColorSpaceXformImageGenerator_DEFINED
-
-#include "SkImageGenerator.h"
-#include "SkImagePriv.h"
-
-class SkColorSpaceXformImageGenerator : public SkImageGenerator {
-public:
-
- static std::unique_ptr<SkImageGenerator> Make(
- const SkBitmap& src, sk_sp<SkColorSpace> dst, SkCopyPixelsMode);
-
-protected:
- 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&, const SkIPoint&,
- SkTransferFunctionBehavior,
- bool willNeedMipMaps) override;
- TexGenType onCanGenerateTexture() const override {
- return TexGenType::kExpensive;
- }
-#endif
-
-private:
- SkBitmap fSrc;
- sk_sp<SkColorSpace> fDst;
-
- static std::unique_ptr<SkImageGenerator> Make(
- const SkBitmap& src, sk_sp<SkColorSpace> dst, SkCopyPixelsMode, uint32_t id);
- SkColorSpaceXformImageGenerator(const SkBitmap& src, sk_sp<SkColorSpace> dst, uint32_t id);
-
- friend sk_sp<SkImage> SkMakeImageInColorSpace(const SkBitmap&, sk_sp<SkColorSpace>, uint32_t,
- SkCopyPixelsMode);
- typedef SkImageGenerator INHERITED;
-};
-
-#endif // SkColorSpaceXformImageGenerator_DEFINED
diff --git a/src/core/SkImagePriv.h b/src/core/SkImagePriv.h
index 349402491d..b0bc85efaf 100644
--- a/src/core/SkImagePriv.h
+++ b/src/core/SkImagePriv.h
@@ -45,19 +45,6 @@ sk_sp<SkShader> SkMakeBitmapShader(const SkBitmap& src, SkShader::TileMode, SkSh
*/
extern SK_API sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap&, SkCopyPixelsMode);
-/**
- * Similar to SkMakeImageFromRasterBitmap, this wraps a |src| bitmap in an image.
- *
- * It also promises to transform the bitmap into the |dst| color space before it
- * is drawn. The transform will happen lazily.
- *
- * If |id| is non-zero, the output image will use that as its unique id. Otherwise,
- * it will generate a new id.
- */
-extern sk_sp<SkImage> SkMakeImageInColorSpace(const SkBitmap& src, sk_sp<SkColorSpace> dst,
- uint32_t id,
- SkCopyPixelsMode = kNever_SkCopyPixelsMode);
-
// Given an image created from SkNewImageFromBitmap, return its pixelref. This
// may be called to see if the surface and the image share the same pixelref,
// in which case the surface may need to perform a copy-on-write.
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index e803ce44e4..1e3d6fea16 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -10,7 +10,6 @@
#include "SkBitmapProcShader.h"
#include "SkCanvas.h"
#include "SkColorSpaceXform_Base.h"
-#include "SkColorSpaceXformImageGenerator.h"
#include "SkColorSpaceXformPriv.h"
#include "SkColorTable.h"
#include "SkConvertPixels.h"
@@ -324,35 +323,6 @@ sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap& bm, SkCopyPixelsMode
return SkMakeImageFromRasterBitmapPriv(bm, cpm, kNeedNewImageUniqueID);
}
-sk_sp<SkImage> SkMakeImageInColorSpace(const SkBitmap& bm, sk_sp<SkColorSpace> dstCS, uint32_t id,
- SkCopyPixelsMode cpm) {
- if (!SkImageInfoIsValidAllowNumericalCS(bm.info()) || !bm.getPixels() ||
- bm.rowBytes() < bm.info().minRowBytes() || !dstCS) {
- return nullptr;
- }
-
- sk_sp<SkColorSpace> srcCS = bm.info().refColorSpace();
- if (!srcCS) {
- // Treat nullptr as sRGB.
- srcCS = SkColorSpace::MakeSRGB();
- }
-
- sk_sp<SkImage> image = nullptr;
-
- // For the Android use case, this is very likely to be true.
- if (SkColorSpace::Equals(srcCS.get(), dstCS.get())) {
- SkASSERT(kNeedNewImageUniqueID == id || bm.getGenerationID() == id);
- image = SkMakeImageFromRasterBitmapPriv(bm, cpm, id);
- } else {
- image = SkImage::MakeFromGenerator(SkColorSpaceXformImageGenerator::Make(bm, dstCS, cpm,
- id));
- }
-
- // If the caller suplied an id, we must propagate that to the image we return
- SkASSERT(kNeedNewImageUniqueID == id || image->uniqueID() == id);
- return image;
-}
-
const SkPixelRef* SkBitmapImageGetPixelRef(const SkImage* image) {
return ((const SkImage_Raster*)image)->getPixelRef();
}
diff --git a/tests/ImageGeneratorTest.cpp b/tests/ImageGeneratorTest.cpp
index 5cfd410ad0..7ee0b90c4c 100644
--- a/tests/ImageGeneratorTest.cpp
+++ b/tests/ImageGeneratorTest.cpp
@@ -110,46 +110,3 @@ DEF_TEST(PictureImageGenerator, reporter) {
}
}
-#include "SkImagePriv.h"
-
-DEF_TEST(ColorXformGenerator, r) {
- SkBitmap a, b, c, d, e;
- SkImageInfo info = SkImageInfo::MakeS32(1, 1, kPremul_SkAlphaType);
- a.allocPixels(info);
- b.allocPixels(info.makeColorSpace(nullptr));
- c.allocPixels(info.makeColorSpace(SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma,
- SkColorSpace::kRec2020_Gamut)));
- d.allocPixels(info.makeColorSpace(SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma,
- SkColorSpace::kAdobeRGB_Gamut)));
- e.allocPixels(info);
- a.eraseColor(0);
- b.eraseColor(1);
- c.eraseColor(2);
- d.eraseColor(3);
- e.eraseColor(4);
-
- sk_sp<SkColorSpace> srgb = SkColorSpace::MakeSRGB();
- sk_sp<SkImage> ia = SkMakeImageInColorSpace(a, srgb, 0);
- sk_sp<SkImage> ib = SkMakeImageInColorSpace(b, srgb, b.getGenerationID());
- sk_sp<SkImage> ic = SkMakeImageInColorSpace(c, srgb, c.getGenerationID());
- sk_sp<SkImage> id = SkMakeImageInColorSpace(d, srgb, 0);
- sk_sp<SkImage> ie = SkMakeImageInColorSpace(e, srgb, e.getGenerationID(),
- kAlways_SkCopyPixelsMode);
-
- // Equal because sRGB->sRGB is a no-op.
- REPORTER_ASSERT(r, ia->uniqueID() == a.getGenerationID());
-
- // Equal because nullptr->sRGB is a no-op (nullptr is treated as sRGB), and because
- // we pass the explicit id that we want. In the no-op case, the implementation
- // actually asserts that if we pass an id, it must match the id on the bitmap.
- REPORTER_ASSERT(r, ib->uniqueID() == b.getGenerationID());
-
- // Equal because we pass in an explicit id.
- REPORTER_ASSERT(r, ic->uniqueID() == c.getGenerationID());
-
- // Not equal because sRGB->Adobe is not a no-op and we do not pass an explicit id.
- REPORTER_ASSERT(r, id->uniqueID() != d.getGenerationID());
-
- // Equal because we pass in an explicit id. Forcing a copy, but still want the id respected.
- REPORTER_ASSERT(r, ie->uniqueID() == e.getGenerationID());
-}