00001 #pragma once 00002 00003 class CJpegEncoder 00004 { 00005 static const int ColorComponents = 3; 00006 00007 int m_w, m_h; 00008 BYTE* m_p; 00009 00010 unsigned int m_bbuff, m_bwidth; 00011 bool PutBit(int b, int n); 00012 void Flush(); 00013 int GetBitWidth(short q); 00014 00015 void WriteSOI(); 00016 void WriteDQT(); 00017 void WriteSOF0(); 00018 void WriteDHT(); 00019 void WriteSOS(); 00020 void WriteEOI(); 00021 00022 protected: 00023 virtual bool PutByte(BYTE b) = 0; 00024 virtual bool PutBytes(const void* pData, int len) = 0; 00025 virtual bool Encode(const BYTE* dib); 00026 00027 public: 00028 CJpegEncoder(); 00029 }; 00030 00031 class CJpegEncoderFile : public CJpegEncoder 00032 { 00033 CString m_fn; 00034 FILE* m_file; 00035 00036 protected: 00037 bool PutByte(BYTE b); 00038 bool PutBytes(const void* pData, int len); 00039 00040 public: 00041 CJpegEncoderFile(LPCTSTR fn); 00042 00043 bool Encode(const BYTE* dib); 00044 }; 00045 00046 class CJpegEncoderMem : public CJpegEncoder 00047 { 00048 CArray<BYTE>* m_pdata; 00049 00050 protected: 00051 bool PutByte(BYTE b); 00052 bool PutBytes(const void* pData, int len); 00053 00054 public: 00055 CJpegEncoderMem(); 00056 00057 bool Encode(const BYTE* dib, CArray<BYTE>& data); 00058 }; 00059