aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-01-09 12:38:59 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-09 18:14:06 +0000
commite94255d456ad86e045e0c3aeab57395566cf49a5 (patch)
tree27b9b6c790015aeb696a96d96cfb46ab7bd7554f /src
parenta16339297859f37df69230e64f05624cef511ad3 (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.cpp25
-rw-r--r--src/core/SkPictureShader.cpp2
-rw-r--r--src/image/SkImage.cpp20
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 {