| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright 2013 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 SkDecodingImageGenerator_DEFINED | |
| 9 #define SkDecodingImageGenerator_DEFINED | |
| 10 | |
| 11 #include "SkBitmap.h" | |
| 12 #include "SkImageGenerator.h" | |
| 13 | |
| 14 class SkData; | |
| 15 class SkStreamRewindable; | |
| 16 | |
| 17 /** | |
| 18 * An implementation of SkImageGenerator that calls into | |
| 19 * SkImageDecoder. | |
| 20 */ | |
| 21 namespace SkDecodingImageGenerator { | |
| 22 /** | |
| 23 * These options will be passed on to the image decoder. The | |
| 24 * defaults are sensible. | |
| 25 * | |
| 26 * @param fSampleSize If set to > 1, tells the decoder to return a | |
| 27 * smaller than original bitmap, sampling 1 pixel for | |
| 28 * every size pixels. e.g. if sample size is set to 3, | |
| 29 * then the returned bitmap will be 1/3 as wide and high, | |
| 30 * and will contain 1/9 as many pixels as the original. | |
| 31 * Note: this is a hint, and the codec may choose to | |
| 32 * ignore this, or only approximate the sample size. | |
| 33 * | |
| 34 * @param fDitherImage Set to true if the the decoder should try to | |
| 35 * dither the resulting image when decoding to a smaller | |
| 36 * color-space. The default is true. | |
| 37 * | |
| 38 * @param fRequestedColorType If not given, then use whichever | |
| 39 * config the decoder wants. Else try to use this color | |
| 40 * type. If the decoder won't support this color type, | |
| 41 * SkDecodingImageGenerator::Create will return | |
| 42 * NULL. kIndex_8_SkColorType is not supported. | |
| 43 * | |
| 44 * @param fRequireUnpremul If true, the decoder will attempt to | |
| 45 * decode without premultiplying the alpha. If it cannot, | |
| 46 * the pixels will be set to NULL. | |
| 47 */ | |
| 48 struct Options { | |
| 49 Options() | |
| 50 : fSampleSize(1) | |
| 51 , fDitherImage(true) | |
| 52 , fUseRequestedColorType(false) | |
| 53 , fRequestedColorType() | |
| 54 , fRequireUnpremul(false) { } | |
| 55 Options(int sampleSize, bool dither) | |
| 56 : fSampleSize(sampleSize) | |
| 57 , fDitherImage(dither) | |
| 58 , fUseRequestedColorType(false) | |
| 59 , fRequestedColorType() | |
| 60 , fRequireUnpremul(false) { } | |
| 61 Options(int sampleSize, bool dither, SkColorType colorType) | |
| 62 : fSampleSize(sampleSize) | |
| 63 , fDitherImage(dither) | |
| 64 , fUseRequestedColorType(true) | |
| 65 , fRequestedColorType(colorType) | |
| 66 , fRequireUnpremul(false) { } | |
| 67 Options(int sampleSize, bool dither, SkColorType colorType, | |
| 68 bool requireUnpremul) | |
| 69 : fSampleSize(sampleSize) | |
| 70 , fDitherImage(dither) | |
| 71 , fUseRequestedColorType(true) | |
| 72 , fRequestedColorType(colorType) | |
| 73 , fRequireUnpremul(requireUnpremul) { } | |
| 74 const int fSampleSize; | |
| 75 const bool fDitherImage; | |
| 76 const bool fUseRequestedColorType; | |
| 77 const SkColorType fRequestedColorType; | |
| 78 const bool fRequireUnpremul; | |
| 79 }; | |
| 80 | |
| 81 /** | |
| 82 * These two functions return a SkImageGenerator that calls into | |
| 83 * SkImageDecoder. They return NULL on failure. | |
| 84 * | |
| 85 * The SkData version of this function is preferred. If the stream | |
| 86 * has an underlying SkData (such as a SkMemoryStream) pass that in. | |
| 87 * | |
| 88 * This object, if non-NULL, takes ownership of stream and deletes stream | |
| 89 * upon deletion. If NULL is returned, stream is deleted immediately. | |
| 90 * | |
| 91 * @param Options (see above) | |
| 92 * | |
| 93 * @return NULL on failure, a new SkImageGenerator on success. | |
| 94 */ | |
| 95 SkImageGenerator* Create(SkStreamRewindable* stream, | |
| 96 const Options& opt); | |
| 97 | |
| 98 /** | |
| 99 * @param data Contains the encoded image data that will be used by | |
| 100 * the SkDecodingImageGenerator. Will be ref()ed by the | |
| 101 * SkImageGenerator constructor and and unref()ed on deletion. | |
| 102 */ | |
| 103 SkImageGenerator* Create(SkData* data, const Options& opt); | |
| 104 }; | |
| 105 | |
| 106 // // Example of most basic use case: | |
| 107 // | |
| 108 // bool install_data(SkData* data, SkBitmap* dst) { | |
| 109 // return SkInstallDiscardablePixelRef( | |
| 110 // SkDecodingImageGenerator::Create( | |
| 111 // data, SkDecodingImageGenerator::Options()), dst, NULL); | |
| 112 // } | |
| 113 // bool install_stream(SkStreamRewindable* stream, SkBitmap* dst) { | |
| 114 // return SkInstallDiscardablePixelRef( | |
| 115 // SkDecodingImageGenerator::Create( | |
| 116 // stream, SkDecodingImageGenerator::Options()), dst, NULL); | |
| 117 // } | |
| 118 | |
| 119 #endif // SkDecodingImageGenerator_DEFINED | |
| OLD | NEW |