Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef IMAGE_CODECS_QTRLE_H
00024 #define IMAGE_CODECS_QTRLE_H
00025
00026 #include "graphics/pixelformat.h"
00027 #include "image/codecs/codec.h"
00028
00029 namespace Image {
00030
00036 class QTRLEDecoder : public Codec {
00037 public:
00038 QTRLEDecoder(uint16 width, uint16 height, byte bitsPerPixel);
00039 ~QTRLEDecoder();
00040
00041 const Graphics::Surface *decodeFrame(Common::SeekableReadStream &stream);
00042 Graphics::PixelFormat getPixelFormat() const;
00043
00044 bool containsPalette() const { return _ditherPalette != 0; }
00045 const byte *getPalette() { _dirtyPalette = false; return _ditherPalette; }
00046 bool hasDirtyPalette() const { return _dirtyPalette; }
00047 bool canDither(DitherType type) const;
00048 void setDither(DitherType type, const byte *palette);
00049
00050 private:
00051 byte _bitsPerPixel;
00052 Graphics::Surface *_surface;
00053 uint16 _width, _height;
00054 uint32 _paddedWidth;
00055 byte *_ditherPalette;
00056 bool _dirtyPalette;
00057 byte *_colorMap;
00058
00059 void createSurface();
00060
00061 void decode1(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange);
00062 void decode2_4(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange, byte bpp);
00063 void decode8(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange);
00064 void decode16(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange);
00065 void decode24(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange);
00066 void dither24(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange);
00067 void decode32(Common::SeekableReadStream &stream, uint32 rowPtr, uint32 linesToChange);
00068 };
00069
00070 }
00071
00072 #endif