00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef INCL_PLPPMDEC
00018 #define INCL_PLPPMDEC
00019
00020 #ifndef INCL_PLPICDEC
00021 #include "plpicdec.h"
00022 #endif
00023
00024 #ifndef INCL_PLPPM
00025 #include "plppm.h"
00026 #endif
00027
00029 class PLPPMDecoder : public PLPicDecoder
00030 {
00031
00032 public:
00034 PLPPMDecoder
00035 ();
00036
00038 virtual ~PLPPMDecoder
00039 ();
00040
00041 protected:
00044 virtual void DoDecode
00045 ( PLBmp * pBmp,
00046 PLDataSource * pDataSrc
00047 );
00048
00049 private:
00050
00051 void readPpmHeader (PPMHEADER *pPpmHead,
00052 PLDataSource * pDataSrc);
00053
00054 int readASCIIDecimal(PLDataSource * pDataSrc);
00055
00056 void skipComment(PLDataSource * pDataSrc);
00057
00058 void skipPpmASCIISeparators(PLDataSource * pDataSrc);
00059
00060 PLBYTE *readASCIILine(PLDataSource *pDataSrc);
00061
00062 void readImage (PPMHEADER * pPpmHead,
00063 PLBmp * pBmp,
00064 PLDataSource * pDataSrc);
00065
00066 void readData(PPMHEADER * pPpmHead,
00067 PLBmp * pBmp,
00068 PLDataSource * pDataSrc);
00069
00070 void expandASCIILine
00071 ( PLPixel32 * pDest,
00072 int MaxGrayValue,
00073 int Width,
00074 PLDataSource * pDataSrc
00075 );
00076
00077 void expandByteLine
00078 ( PLPixel32 * pDest,
00079 int MaxGrayValue,
00080 int Width,
00081 PLDataSource * pDataSrc
00082 );
00083
00084
00085 PLPixel32 PLPPMDecoder::readASCIIPixel32
00086 ( int MaxGrayValue,
00087 PLDataSource * pDataSrc
00088 );
00089
00090 PLBYTE m_LastByte;
00091 bool m_UseLastByte;
00092 };
00093
00094 #endif
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114