1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkPixelSerializer_DEFINED 9 #define SkPixelSerializer_DEFINED 10 11 #include "SkRefCnt.h" 12 13 class SkData; 14 struct SkImageInfo; 15 16 /** 17 * Interface for serializing pixels, e.g. SkBitmaps in an SkPicture. 18 */ 19 class SkPixelSerializer : public SkRefCnt { 20 public: ~SkPixelSerializer()21 virtual ~SkPixelSerializer() {} 22 23 /** 24 * Call to determine if the client wants to serialize the encoded data. If 25 * false, serialize another version (e.g. the result of encodePixels). 26 */ useEncodedData(const void * data,size_t len)27 bool useEncodedData(const void* data, size_t len) { 28 return this->onUseEncodedData(data, len); 29 } 30 31 /** 32 * Call to get the client's version of encoding these pixels. If it 33 * returns NULL, serialize the raw pixels. 34 */ encodePixels(const SkImageInfo & info,const void * pixels,size_t rowBytes)35 SkData* encodePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes) { 36 return this->onEncodePixels(info, pixels, rowBytes); 37 } 38 39 protected: 40 /** 41 * Return true if you want to serialize the encoded data, false if you want 42 * another version serialized (e.g. the result of encodePixels). 43 */ 44 virtual bool onUseEncodedData(const void* data, size_t len) = 0; 45 46 /** 47 * If you want to encode these pixels, return the encoded data as an SkData 48 * Return null if you want to serialize the raw pixels. 49 */ 50 virtual SkData* onEncodePixels(const SkImageInfo&, const void* pixels, size_t rowBytes) = 0; 51 }; 52 #endif // SkPixelSerializer_DEFINED 53