1 /* 2 * Copyright 2015 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 #include "SkCodec.h" 9 #include "SkImageInfo.h" 10 #include "SkStream.h" 11 #include "SkTypes.h" 12 13 /* 14 * This class implements the decoding for bmp images 15 */ 16 class SkIcoCodec : public SkCodec { 17 public: 18 19 /* 20 * Checks the start of the stream to see if the image is a Ico or Cur 21 */ 22 static bool IsIco(SkStream*); 23 24 /* 25 * Assumes IsIco was called and returned true 26 * Creates an Ico decoder 27 * Reads enough of the stream to determine the image format 28 */ 29 static SkCodec* NewFromStream(SkStream*); 30 31 protected: 32 33 /* 34 * Chooses the best dimensions given the desired scale 35 */ 36 SkISize onGetScaledDimensions(float desiredScale) const override; 37 38 /* 39 * Initiates the Ico decode 40 */ 41 Result onGetPixels(const SkImageInfo& dstInfo, void* dst, 42 size_t dstRowBytes, const Options&, SkPMColor*, int*) 43 override; 44 onGetEncodedFormat()45 SkEncodedFormat onGetEncodedFormat() const override { 46 return kICO_SkEncodedFormat; 47 } 48 49 private: 50 51 /* 52 * Constructor called by NewFromStream 53 * @param embeddedCodecs codecs for the embedded images, takes ownership 54 */ 55 SkIcoCodec(const SkImageInfo& srcInfo, 56 SkTArray<SkAutoTDelete<SkCodec>, true>* embeddedCodecs); 57 58 SkAutoTDelete<SkTArray<SkAutoTDelete<SkCodec>, true>> 59 fEmbeddedCodecs; // owned 60 61 typedef SkCodec INHERITED; 62 }; 63