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 "SkBmpCodec.h" 9#include "SkImageInfo.h" 10#include "SkMaskSwizzler.h" 11#include "SkTypes.h" 12 13/* 14 * This class implements the decoding for bmp images using bit masks 15 */ 16class SkBmpMaskCodec : public SkBmpCodec { 17public: 18 19 /* 20 * Creates an instance of the decoder 21 * 22 * Called only by SkBmpCodec::NewFromStream 23 * There should be no other callers despite this being public 24 * 25 * @param srcInfo contains the source width and height 26 * @param stream the stream of encoded image data 27 * @param bitsPerPixel the number of bits used to store each pixel 28 * @param masks color masks for certain bmp formats 29 * @param rowOrder indicates whether rows are ordered top-down or bottom-up 30 */ 31 SkBmpMaskCodec(const SkImageInfo& srcInfo, SkStream* stream, 32 uint16_t bitsPerPixel, SkMasks* masks, 33 SkCodec::SkScanlineOrder rowOrder); 34 35protected: 36 37 Result onGetPixels(const SkImageInfo& dstInfo, void* dst, 38 size_t dstRowBytes, const Options&, SkPMColor*, 39 int*, int*) override; 40 41 SkCodec::Result prepareToDecode(const SkImageInfo& dstInfo, 42 const SkCodec::Options& options, SkPMColor inputColorPtr[], 43 int* inputColorCount) override; 44 45private: 46 47 SkSampler* getSampler(bool createIfNecessary) override { 48 SkASSERT(fMaskSwizzler); 49 return fMaskSwizzler; 50 } 51 52 int decodeRows(const SkImageInfo& dstInfo, void* dst, size_t dstRowBytes, 53 const Options& opts) override; 54 55 SkAutoTDelete<SkMasks> fMasks; // owned 56 SkAutoTDelete<SkMaskSwizzler> fMaskSwizzler; 57 SkAutoTDeleteArray<uint8_t> fSrcBuffer; 58 59 typedef SkBmpCodec INHERITED; 60}; 61