Index: src/codec/SkBmpCodec.h |
diff --git a/src/codec/SkBmpCodec.h b/src/codec/SkBmpCodec.h |
index 9909945c51047865cdb72c45a77cfea9125bc395..7a84627ac9eed8401b569eaa49ff26a8443536dd 100644 |
--- a/src/codec/SkBmpCodec.h |
+++ b/src/codec/SkBmpCodec.h |
@@ -4,6 +4,8 @@ |
* Use of this source code is governed by a BSD-style license that can be |
* found in the LICENSE file. |
*/ |
+#ifndef SkBmpCodec_DEFINED |
+#define SkBmpCodec_DEFINED |
#include "SkCodec.h" |
#include "SkColorTable.h" |
@@ -13,19 +15,14 @@ |
#include "SkSwizzler.h" |
#include "SkTypes.h" |
-// TODO: rename SkCodec_libbmp files to SkBmpCodec |
/* |
- * |
- * This class implements the decoding for bmp images |
- * |
+ * This class enables the creation of specific bmp codecs that subclass SkCodec |
*/ |
-class SkBmpCodec : public SkCodec { |
+class SkBmpCodec { |
public: |
/* |
- * |
* Describes if rows of the input start at the top or bottom of the image |
- * |
*/ |
enum RowOrder { |
kTopDown_RowOrder, |
@@ -33,161 +30,59 @@ public: |
}; |
/* |
- * |
* Checks the start of the stream to see if the image is a bmp |
- * |
*/ |
static bool IsBmp(SkStream*); |
/* |
- * |
* Assumes IsBmp was called and returned true |
* Creates a bmp decoder |
* Reads enough of the stream to determine the image format |
- * |
*/ |
static SkCodec* NewFromStream(SkStream*); |
/* |
- * |
* Creates a bmp decoder for a bmp embedded in ico |
* Reads enough of the stream to determine the image format |
- * |
*/ |
static SkCodec* NewFromIco(SkStream*); |
-protected: |
- |
- /* |
- * |
- * Initiates the bmp decode |
- * |
- */ |
- Result onGetPixels(const SkImageInfo& dstInfo, void* dst, |
- size_t dstRowBytes, const Options&, SkPMColor*, |
- int*) override; |
- |
- SkEncodedFormat onGetEncodedFormat() const override { return kBMP_SkEncodedFormat; } |
- |
private: |
/* |
- * |
* Used to define the input format of the bmp |
- * |
*/ |
- enum BitmapInputFormat { |
- kStandard_BitmapInputFormat, |
- kRLE_BitmapInputFormat, |
- kBitMask_BitmapInputFormat, |
- kUnknown_BitmapInputFormat |
+ enum BmpInputFormat { |
+ kStandard_BmpInputFormat, |
+ kRLE_BmpInputFormat, |
+ kBitMask_BmpInputFormat, |
+ kUnknown_BmpInputFormat |
}; |
/* |
- * |
- * Creates the color table |
- * Sets colorCount to the new color count if it is non-NULL |
- */ |
- bool createColorTable(SkAlphaType alphaType, int* colorCount); |
- |
- /* |
- * |
* Creates a bmp decoder |
* Reads enough of the stream to determine the image format |
- * |
*/ |
static SkCodec* NewFromStream(SkStream*, bool isIco); |
/* |
- * |
* Read enough of the stream to initialize the SkBmpCodec. Returns a bool |
* representing success or failure. If it returned true, and codecOut was |
* not NULL, it will be set to a new SkBmpCodec. |
* Does *not* take ownership of the passed in SkStream. |
- * |
*/ |
static bool ReadHeader(SkStream*, bool isIco, SkCodec** codecOut); |
/* |
- * |
- * Performs the bitmap decoding for bit masks input format |
- * |
- */ |
- Result decodeMask(const SkImageInfo& dstInfo, void* dst, |
- size_t dstRowBytes, const Options& opts); |
- |
- /* |
- * |
- * Set an RLE pixel using the color table |
- * |
+ * Fix the decoded output when a bmp is encoded as fully transparent. |
+ * It was most likely not intended to be opaque. |
*/ |
- void setRLEPixel(void* dst, size_t dstRowBytes, |
- const SkImageInfo& dstInfo, uint32_t x, uint32_t y, |
- uint8_t index); |
- /* |
- * |
- * Set an RLE24 pixel from R, G, B values |
- * |
- */ |
- void setRLE24Pixel(void* dst, size_t dstRowBytes, |
- const SkImageInfo& dstInfo, uint32_t x, uint32_t y, |
- uint8_t red, uint8_t green, uint8_t blue); |
+ static SkCodec::Result FixTransparentDecode(void* dst, size_t dstRowBytes, |
+ SkPMColor* colorPtr, int* colorCountPtr, SkStream* stream); |
- /* |
- * |
- * Performs the bitmap decoding for RLE input format |
- * |
- */ |
- Result decodeRLE(const SkImageInfo& dstInfo, void* dst, |
- size_t dstRowBytes, const Options& opts); |
- |
- /* |
- * |
- * Performs the bitmap decoding for standard input format |
- * |
- */ |
- Result decode(const SkImageInfo& dstInfo, void* dst, size_t dstRowBytes, const Options& opts); |
- |
- /* |
- * |
- * Creates an instance of the decoder |
- * Called only by NewFromStream |
- * |
- * @param srcInfo contains the source width and height |
- * @param stream the stream of image data |
- * @param bitsPerPixel the number of bits used to store each pixel |
- * @param format the format of the bmp file |
- * @param masks optional color masks for certain bmp formats, passes |
- ownership to SkBmpCodec |
- * @param numColors the number of colors in the color table |
- * @param bytesPerColor the number of bytes in the stream used to represent |
- each color in the color table |
- * @param offset the offset of the image pixel data from the end of the |
- * headers |
- * @param rowOrder indicates whether rows are ordered top-down or bottom-up |
- * @param RLEBytes used only for RLE decodes, as we must decode all |
- * of the data at once rather than row by row |
- * it indicates the amount of data left in the stream |
- * after decoding the headers |
- * |
- */ |
- SkBmpCodec(const SkImageInfo& srcInfo, SkStream* stream, |
- uint16_t bitsPerPixel, BitmapInputFormat format, |
- SkMasks* masks, uint32_t numColors, uint32_t bytesPerColor, |
- uint32_t offset, RowOrder rowOrder, size_t RLEBytes, |
- bool isIco); |
- |
- // Fields |
- const uint16_t fBitsPerPixel; |
- const BitmapInputFormat fInputFormat; |
- SkAutoTDelete<SkMasks> fMasks; // owned |
- SkAutoTUnref<SkColorTable> fColorTable; // owned |
- uint32_t fNumColors; |
- const uint32_t fBytesPerColor; |
- const uint32_t fOffset; |
- const RowOrder fRowOrder; |
- const size_t fRLEBytes; |
- const bool fIsIco; |
- |
- typedef SkCodec INHERITED; |
+ friend class SkBmpMaskCodec; |
+ friend class SkBmpRLECodec; |
+ friend class SkBmpStandardCodec; |
}; |
+ |
+#endif |