diff options
author | scroggo <scroggo@google.com> | 2014-12-11 10:53:58 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-11 10:53:58 -0800 |
commit | 895c43b28b27bb3124db3d32efd0c7219eb4a3cb (patch) | |
tree | 6ddad54915062eca5db65a8ad56525540ce380b1 /tests/PictureTest.cpp | |
parent | 436293a3308d58ce494d9667bd13428dd6e35236 (diff) |
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
Diffstat (limited to 'tests/PictureTest.cpp')
-rw-r--r-- | tests/PictureTest.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
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<SkPicture> picture(recorder.endRecording()); SkDynamicMemoryWStream wStream; - picture->serialize(&wStream, &encode_bitmap_to_data); + PngPixelSerializer serializer; + picture->serialize(&wStream, &serializer); return wStream.copyToData(); } |