00001
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00072
00073
00074
00075
00077
00078 #if !defined(_ICCPROFILE_H)
00079 #define _ICCPROFILE_H
00080
00081 #include "IccDefs.h"
00082 #include <list>
00083 #include <string>
00084
00085 #ifdef USESAMPLEICCNAMESPACE
00086 namespace sampleICC {
00087 #endif
00088
00089 class ICCPROFLIB_API CIccTag;
00090 class ICCPROFLIB_API CIccIO;
00091
00101 struct IccTagEntry
00102 {
00103
00104 icTag TagInfo;
00105 CIccTag* pTag;
00106 };
00107
00116 typedef std::list<IccTagEntry> TagEntryList;
00117
00125 typedef struct {CIccTag *ptr;} IccTagPtr;
00126
00135 typedef std::list<IccTagPtr> TagPtrList;
00136
00146 class ICCPROFLIB_API CIccProfile
00147 {
00148 public:
00149 CIccProfile();
00150 CIccProfile(const CIccProfile &Profile);
00151 CIccProfile &operator=(const CIccProfile &Profile);
00152 virtual ~CIccProfile();
00153
00154 icHeader m_Header;
00155
00156 TagEntryList *m_Tags;
00157
00158 CIccTag* FindTag(icSignature sig);
00159 bool AttachTag(icSignature sig, CIccTag *pTag);
00160 bool DeleteTag(icSignature sig);
00161
00162 bool Attach(CIccIO *pIO);
00163 bool Detach();
00164 bool Read(CIccIO *pIO);
00165 icValidateStatus ReadValidate(CIccIO *pIO, std::string &sReport);
00166 bool Write(CIccIO *pIO);
00167
00168 void InitHeader();
00169 icValidateStatus Validate(std::string &sReport) const;
00170
00171 icUInt16Number GetSpaceSamples() const;
00172
00173 bool AreTagsUnique() const;
00174
00175 protected:
00176
00177 void Cleanup();
00178 IccTagEntry* GetTag(icSignature sig) const;
00179 IccTagEntry* GetTag(CIccTag *pTag) const;
00180 bool ReadBasic(CIccIO *pIO);
00181 bool LoadTag(IccTagEntry *pTagEntry, CIccIO *pIO);
00182 bool DetachTag(CIccTag *pTag);
00183
00184
00185 icValidateStatus CheckRequiredTags(std::string &sReport) const;
00186 bool CheckTagExclusion(std::string &sReport) const;
00187 icValidateStatus CheckHeader(std::string &sReport) const;
00188 icValidateStatus CheckTagTypes(std::string &sReport) const;
00189 bool IsTypeValid(icTagSignature tagSig, icTagTypeSignature typeSig) const;
00190 bool CheckFileSize(CIccIO *pIO) const;
00191
00192 CIccIO *m_pAttachIO;
00193
00194 TagPtrList *m_TagVals;
00195 };
00196
00197 CIccProfile ICCPROFLIB_API *ReadIccProfile(const icChar *szFilename);
00198 CIccProfile ICCPROFLIB_API *ReadIccProfile(const icUInt8Number *pMem, icUInt32Number nSize);
00199 CIccProfile ICCPROFLIB_API *OpenIccProfile(const icChar *szFilename);
00200 CIccProfile ICCPROFLIB_API *OpenIccProfile(const icUInt8Number *pMem, icUInt32Number nSize);
00201 CIccProfile ICCPROFLIB_API *ValidateIccProfile(const icChar *szFilename, std::string &sReport, icValidateStatus &nStatus);
00202
00203 bool ICCPROFLIB_API SaveIccProfile(const icChar *szFilename, CIccProfile *pIcc);
00204
00205 void ICCPROFLIB_API CalcProfileID(CIccIO *pIO, icProfileID *profileID);
00206 bool ICCPROFLIB_API CalcProfileID(const icChar *szFilename, icProfileID *profileID);
00207
00208 #ifdef USESAMPLEICCNAMESPACE
00209 }
00210 #endif
00211
00212 #endif // !defined(_ICCPROFILE_H)