| /* |
| * Copyright 2013 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkImageGenerator_DEFINED |
| #define SkImageGenerator_DEFINED |
| |
| #include "SkImageInfo.h" |
| |
| class SkData; |
| |
| /** |
| * An interface that allows a purgeable PixelRef (such as a |
| * SkDiscardablePixelRef) to decode and re-decode an image as needed. |
| */ |
| class SkImageGenerator { |
| public: |
| /** |
| * The PixelRef which takes ownership of this SkImageGenerator |
| * will call the image generator's destructor. |
| */ |
| virtual ~SkImageGenerator() { } |
| |
| /** |
| * Return a ref to the encoded (i.e. compressed) representation, |
| * of this data. |
| * |
| * If non-NULL is returned, the caller is responsible for calling |
| * unref() on the data when it is finished. |
| */ |
| virtual SkData* refEncodedData() { return NULL; } |
| |
| /** |
| * Return some information about the image, allowing the owner of |
| * this object to allocate pixels. |
| * |
| * @return false if anything goes wrong. |
| */ |
| virtual bool getInfo(SkImageInfo* info) = 0; |
| |
| /** |
| * Decode into the given pixels, a block of memory of size at |
| * least (info.fHeight - 1) * rowBytes + (info.fWidth * |
| * bytesPerPixel) |
| * |
| * @param info A description of the format (config, size) |
| * expected by the caller. This can simply be identical |
| * to the info returned by getInfo(). |
| * |
| * This contract also allows the caller to specify |
| * different output-configs, which the implementation can |
| * decide to support or not. |
| * |
| * @return false if anything goes wrong or if the image info is |
| * unsupported. |
| */ |
| virtual bool getPixels(const SkImageInfo& info, |
| void* pixels, |
| size_t rowBytes) = 0; |
| }; |
| |
| #endif // SkImageGenerator_DEFINED |