From 895c43b28b27bb3124db3d32efd0c7219eb4a3cb Mon Sep 17 00:00:00 2001 From: scroggo Date: Thu, 11 Dec 2014 10:53:58 -0800 Subject: Replace EncodeBitmap with an interface. Gives more flexibility to the caller to decide whether to use the encoded data returned by refEncodedData(). Provides an implementation that supports the old version of SkPicture::serialize(). TODO: Update Chrome, so we can remove SK_LEGACY_ENCODE_BITMAP entirely BUG=skia:3190 Review URL: https://codereview.chromium.org/784643002 --- tests/PictureTest.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'tests/PictureTest.cpp') diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp index b4c2a74469..2881e5f5a8 100644 --- a/tests/PictureTest.cpp +++ b/tests/PictureTest.cpp @@ -22,6 +22,7 @@ #include "SkPictureRecorder.h" #include "SkPictureUtils.h" #include "SkPixelRef.h" +#include "SkPixelSerializer.h" #include "SkRRect.h" #include "SkRandom.h" #include "SkRecord.h" @@ -1442,9 +1443,21 @@ static void test_bad_bitmap() { } #endif -static SkData* encode_bitmap_to_data(size_t*, const SkBitmap& bm) { - return SkImageEncoder::EncodeData(bm, SkImageEncoder::kPNG_Type, 100); -} +// Encodes to PNG, unless there is already encoded data, in which case that gets +// used. +// FIXME: Share with PictureRenderer.cpp? +class PngPixelSerializer : public SkPixelSerializer { +public: + virtual bool onUseEncodedData(const void*, size_t) SK_OVERRIDE { return true; } + virtual SkData* onEncodePixels(const SkImageInfo& info, void* pixels, + size_t rowBytes) SK_OVERRIDE { + SkBitmap bm; + if (!bm.installPixels(info, pixels, rowBytes)) { + return NULL; + } + return SkImageEncoder::EncodeData(bm, SkImageEncoder::kPNG_Type, 100); + } +}; static SkData* serialized_picture_from_bitmap(const SkBitmap& bitmap) { SkPictureRecorder recorder; @@ -1454,7 +1467,8 @@ static SkData* serialized_picture_from_bitmap(const SkBitmap& bitmap) { SkAutoTUnref picture(recorder.endRecording()); SkDynamicMemoryWStream wStream; - picture->serialize(&wStream, &encode_bitmap_to_data); + PngPixelSerializer serializer; + picture->serialize(&wStream, &serializer); return wStream.copyToData(); } -- cgit v1.2.3