aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/encode-platform.cpp
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2016-11-30 17:07:59 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-30 22:48:56 +0000
commit1fcc40474f1ad1f522d0a61086e25a71ca0a6881 (patch)
tree298d1a0b66d5d1899133c6252c877931661c5e95 /gm/encode-platform.cpp
parent3a7492fc04d83ed2729d2ba226d5277459536b74 (diff)
SkEncodeImage: no more link-time registration
Also, no more SkImageEncoder class. SK_SUPPORT_LEGACY_IMAGE_ENCODER_CLASS now only guards some old API shims. GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5006 Change-Id: I3797f584f3e8e12ade10d31e8733163453725f40 Reviewed-on: https://skia-review.googlesource.com/5006 Commit-Queue: Hal Canary <halcanary@google.com> Reviewed-by: Leon Scroggins <scroggo@google.com> Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'gm/encode-platform.cpp')
-rw-r--r--gm/encode-platform.cpp55
1 files changed, 27 insertions, 28 deletions
diff --git a/gm/encode-platform.cpp b/gm/encode-platform.cpp
index 0357298711..e8f420fb15 100644
--- a/gm/encode-platform.cpp
+++ b/gm/encode-platform.cpp
@@ -37,26 +37,6 @@ static void make_unpremul_256(SkBitmap* bitmap) {
bitmap->setAlphaType(kUnpremul_SkAlphaType);
}
-static SkImageEncoder* make_encoder(SkEncodedImageFormat type) {
-#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
- return CreateImageEncoder_CG((SkImageEncoder::Type)type);
-#elif defined(SK_BUILD_FOR_WIN)
- return CreateImageEncoder_WIC((SkImageEncoder::Type)type);
-#else
- switch (type) {
- case SkEncodedImageFormat::kPNG:
- return CreatePNGImageEncoder();
- case SkEncodedImageFormat::kJPEG:
- return CreateJPEGImageEncoder();
- case SkEncodedImageFormat::kWEBP:
- return CreateWEBPImageEncoder();
- default:
- SkASSERT(false);
- return nullptr;
- }
-#endif
-}
-
#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
static SkEncodedImageFormat kTypes[] {
SkEncodedImageFormat::kPNG, SkEncodedImageFormat::kJPEG, SkEncodedImageFormat::kGIF,
@@ -76,9 +56,30 @@ static SkEncodedImageFormat kTypes[] {
};
#endif
-static sk_sp<SkData> encode_data(std::unique_ptr<SkImageEncoder>& encoder, const SkBitmap& src) {
- SkDynamicMemoryWStream buffer;
- return encoder->encodeStream(&buffer, src, 100) ? buffer.detachAsData() : nullptr;
+static sk_sp<SkData> encode_data(SkEncodedImageFormat type, const SkBitmap& bitmap) {
+ SkAutoLockPixels autoLockPixels(bitmap);
+ SkPixmap src;
+ if (!bitmap.peekPixels(&src)) {
+ return nullptr;
+ }
+ SkDynamicMemoryWStream buf;
+ #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
+ return SkEncodeImageWithCG(&buf, src, type) ? buf.detachAsData() : nullptr;
+ #elif defined(SK_BUILD_FOR_WIN)
+ return SkEncodeImageWithWIC(&buf, src, type, 100) ? buf.detachAsData() : nullptr;
+ #else
+ switch (type) {
+ case SkEncodedImageFormat::kPNG:
+ return SkEncodeImageAsPNG(&buf, src) ? buf.detachAsData() : nullptr;
+ case SkEncodedImageFormat::kJPEG:
+ return SkEncodeImageAsJPEG(&buf, src, 100) ? buf.detachAsData() : nullptr;
+ case SkEncodedImageFormat::kWEBP:
+ return SkEncodeImageAsWEBP(&buf, src, 100) ? buf.detachAsData() : nullptr;
+ default:
+ SkASSERT(false);
+ return nullptr;
+ }
+ #endif
}
class EncodePlatformGM : public GM {
@@ -101,11 +102,9 @@ protected:
make_unpremul_256(&unpremulBm);
for (SkEncodedImageFormat type : kTypes) {
- std::unique_ptr<SkImageEncoder> encoder(make_encoder(type));
-
- auto opaqueImage = SkImage::MakeFromEncoded(encode_data(encoder, opaqueBm));
- auto premulImage = SkImage::MakeFromEncoded(encode_data(encoder, premulBm));
- auto unpremulImage = SkImage::MakeFromEncoded(encode_data(encoder, unpremulBm));
+ auto opaqueImage = SkImage::MakeFromEncoded(encode_data(type, opaqueBm));
+ auto premulImage = SkImage::MakeFromEncoded(encode_data(type, premulBm));
+ auto unpremulImage = SkImage::MakeFromEncoded(encode_data(type, unpremulBm));
canvas->drawImage(opaqueImage.get(), 0.0f, 0.0f);
canvas->drawImage(premulImage.get(), 0.0f, 256.0f);