diff options
author | 2017-01-09 12:38:59 -0500 | |
---|---|---|
committer | 2017-01-09 18:14:06 +0000 | |
commit | e94255d456ad86e045e0c3aeab57395566cf49a5 (patch) | |
tree | 27b9b6c790015aeb696a96d96cfb46ab7bd7554f /src | |
parent | a16339297859f37df69230e64f05624cef511ad3 (diff) |
Specify bit depth and color space in SkImage::MakeFromPicture()
BUG=skia:
Change-Id: I1d2a2b1f97557fc3e7ca6c2bdad6329f7760dbd2
Reviewed-on: https://skia-review.googlesource.com/6685
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkPictureImageGenerator.cpp | 25 | ||||
-rw-r--r-- | src/core/SkPictureShader.cpp | 2 | ||||
-rw-r--r-- | src/image/SkImage.cpp | 20 |
3 files changed, 27 insertions, 20 deletions
diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp index 4de49f03cd..3a4749b480 100644 --- a/src/core/SkPictureImageGenerator.cpp +++ b/src/core/SkPictureImageGenerator.cpp @@ -17,7 +17,7 @@ class SkPictureImageGenerator : SkImageGenerator { public: static SkImageGenerator* Create(const SkISize&, const SkPicture*, const SkMatrix*, - const SkPaint*, sk_sp<SkColorSpace>); + const SkPaint*, SkImage::BitDepth, sk_sp<SkColorSpace>); protected: bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, SkPMColor ctable[], @@ -42,20 +42,25 @@ private: SkImageGenerator* SkPictureImageGenerator::Create(const SkISize& size, const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint, + SkImage::BitDepth bitDepth, sk_sp<SkColorSpace> colorSpace) { - if (!picture || size.isEmpty()) { + if (!picture || size.isEmpty() || !colorSpace) { return nullptr; } - SkColorType colorType; - if (!colorSpace || colorSpace->gammaCloseToSRGB()) { - colorType = kN32_SkColorType; - } else if (colorSpace->gammaIsLinear()) { - colorType = kRGBA_F16_SkColorType; - } else { + if (SkImage::BitDepth::kF16 == bitDepth && !colorSpace->gammaIsLinear()) { + return nullptr; + } + + if (!colorSpace->gammaCloseToSRGB() && !colorSpace->gammaIsLinear()) { return nullptr; } + SkColorType colorType = kN32_SkColorType; + if (SkImage::BitDepth::kF16 == bitDepth) { + colorType = kRGBA_F16_SkColorType; + } + SkImageInfo info = SkImageInfo::Make(size.width(), size.height(), colorType, kPremul_SkAlphaType, std::move(colorSpace)); return new SkPictureImageGenerator(info, picture, matrix, paint); @@ -134,8 +139,10 @@ bool SkPictureImageGenerator::onGenerateScaledPixels(const SkPixmap& scaledPixel SkImageGenerator* SkImageGenerator::NewFromPicture(const SkISize& size, const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint, + SkImage::BitDepth bitDepth, sk_sp<SkColorSpace> colorSpace) { - return SkPictureImageGenerator::Create(size, picture, matrix, paint, std::move(colorSpace)); + return SkPictureImageGenerator::Create(size, picture, matrix, paint, bitDepth, + std::move(colorSpace)); } /////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp index e34ca99e0c..1f20623592 100644 --- a/src/core/SkPictureShader.cpp +++ b/src/core/SkPictureShader.cpp @@ -227,7 +227,7 @@ sk_sp<SkShader> SkPictureShader::refBitmapShader(const SkMatrix& viewMatrix, con sk_sp<SkImage> tileImage( SkImage::MakeFromPicture(fPicture, tileSize, &tileMatrix, nullptr, - sk_ref_sp(dstColorSpace))); + SkImage::BitDepth::kU8, sk_ref_sp(dstColorSpace))); if (!tileImage) { return nullptr; } diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index 8a4fb293e9..f49a2ce285 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -299,21 +299,21 @@ bool SkImage_Base::onAsLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode mode) con return true; } +#ifdef SK_USE_LEGACY_MAKE_PICTURE_API sk_sp<SkImage> SkImage::MakeFromPicture(sk_sp<SkPicture> picture, const SkISize& dimensions, - const SkMatrix* matrix, const SkPaint* paint, - sk_sp<SkColorSpace> colorSpace) { - if (!picture) { - return nullptr; - } - return MakeFromGenerator(SkImageGenerator::NewFromPicture(dimensions, picture.get(), matrix, - paint, std::move(colorSpace))); + const SkMatrix* matrix, const SkPaint* paint) { + return SkImage::MakeFromPicture(std::move(picture), dimensions, matrix, paint, BitDepth::kU8, + SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named)); } +#endif sk_sp<SkImage> SkImage::MakeFromPicture(sk_sp<SkPicture> picture, const SkISize& dimensions, - const SkMatrix* matrix, const SkPaint* paint) { - return MakeFromPicture(std::move(picture), dimensions, matrix, paint, nullptr); + const SkMatrix* matrix, const SkPaint* paint, + BitDepth bitDepth, sk_sp<SkColorSpace> colorSpace) { + return MakeFromGenerator(SkImageGenerator::NewFromPicture(dimensions, picture.get(), matrix, + paint, bitDepth, + std::move(colorSpace))); } - sk_sp<SkImage> SkImage::makeWithFilter(const SkImageFilter* filter, const SkIRect& subset, const SkIRect& clipBounds, SkIRect* outSubset, SkIPoint* offset) const { |