IccMAX 2.1.27
Color Profile Tools
Loading...
Searching...
No Matches
wxProfileDump.cpp File Reference
#include "IccProfile.h"
#include "IccTag.h"
#include "IccUtil.h"
#include "IccEval.h"
#include "IccPrmg.h"
#include "IccProfLibVer.h"
#include "wx/wxprec.h"
#include "wx/wx.h"
#include "wx/mdi.h"
#include "wx/toolbar.h"
#include "wx/config.h"
#include "wx/filename.h"
#include "wx/filedlg.h"
#include "bitmaps/new.xpm"
#include "bitmaps/open.xpm"
#include "bitmaps/save.xpm"
#include "bitmaps/copy.xpm"
#include "bitmaps/cut.xpm"
#include "bitmaps/paste.xpm"
#include "bitmaps/print.xpm"
#include "bitmaps/help.xpm"
#include "wxProfileDump.h"
+ Include dependency graph for wxProfileDump.cpp:

Go to the source code of this file.

Data Structures

class  CIccMinMaxEval
 

Macros

#define ID_ROUND_TRIP   1002
 
#define ID_TAG_LIST   1001
 
#define ID_VALIDATE_PROFILE   1000
 
#define wxT(x)   x
 

Functions

wxString AnalyzeRoundTrip (wxString &profilePath, icRenderingIntent nIntent, bool bUseMPE)
 
static bool IsRoundTripable (CIccProfile *pIcc)
 

Variables

static int gs_nFrames = 0
 
wxList my_children
 
MyFramemy_frame = (MyFrame *) NULL
 
static long xpos = -1
 
static long ypos = -1
 

Detailed Description

File: wxProfileDump.cpp

Contains: Main application that displays profile contents using wxWidgets

Version: V1

Copyright: (c) see ICC Software License

Definition in file wxProfileDump.cpp.

Macro Definition Documentation

◆ ID_ROUND_TRIP

#define ID_ROUND_TRIP   1002

◆ ID_TAG_LIST

#define ID_TAG_LIST   1001

◆ ID_VALIDATE_PROFILE

#define ID_VALIDATE_PROFILE   1000

◆ wxT

#define wxT (   x)    x

Function Documentation

◆ AnalyzeRoundTrip()

wxString AnalyzeRoundTrip ( wxString &  profilePath,
icRenderingIntent  nIntent,
bool  bUseMPE 
)
958{
959 CIccInfo info;
960 wxString report;
961 CIccMinMaxEval eval;
962
963 if (bUseMPE)
964 report += wxString::Format("MPE Rendering Intent: %s\n", info.GetRenderingIntentName(nIntent));
965 else
966 report += wxString::Format("Rendering Intent: %s\n", info.GetRenderingIntentName(nIntent));
967
968 std::string path = profilePath.ToStdString(wxConvUTF8);
969
970 clock_t start = clock();
971 icStatusCMM stat = eval.EvaluateProfile( (const icChar*) path.c_str(), 0, nIntent, icInterpTetrahedral, bUseMPE);
972
973 if (stat!=icCmmStatOk) {
974 report += wxString::Format(" Unable to perform round trip on '%s'\n", profilePath.c_str());
975 report += "\n";
976 report += "CMM Status: ";
977 report += CIccCmm::GetStatusText(stat);
978 report += "\n\n";
979
980 return report;
981 }
982
983 CIccPRMG prmg;
984
985 stat = prmg.EvaluateProfile( (const icChar*) path.c_str(), nIntent, icInterpTetrahedral, bUseMPE);
986 clock_t elapsed = clock() - start;
987
988 if (stat!=icCmmStatOk) {
989 report += wxString::Format(" Unable to perform PRMG analysis on '%s'\n", profilePath.c_str());
990 report += "\n";
991
992 return report;
993 }
994
995 if (nIntent!=icRelativeColorimetric)
996 report += wxString::Format("Specified Rendering Intent Gamut: %s\n", prmg.m_bPrmgImplied ? "Perceptual Reference Medium Gamut" : "Not Specified");
997
998 report += wxString::Format("\n Round Trip 1\n");
999 report += wxString::Format( " ------------\n");
1000 report += wxString::Format(" Min DeltaE: %8.2" ICFLOATSFX "\n", eval.minDE1);
1001 report += wxString::Format(" Mean DeltaE: %8.2" ICFLOATSFX "\n", eval.GetMean1());
1002 report += wxString::Format(" Max DeltaE: %8.2" ICFLOATSFX "\n\n", eval.maxDE1);
1003
1004 report += wxString::Format(" Max L, a, b: " ICFLOATFMT ", " ICFLOATFMT ", " ICFLOATFMT "\n", eval.maxLab1[0], eval.maxLab1[1], eval.maxLab1[2]);
1005
1006 report += wxString::Format("\n Round Trip 2\n");
1007 report += wxString::Format( " ------------\n");
1008 report += wxString::Format(" Min DeltaE: %8.2" ICFLOATSFX "\n", eval.minDE2);
1009 report += wxString::Format(" Mean DeltaE: %8.2" ICFLOATSFX "\n", eval.GetMean2());
1010 report += wxString::Format(" Max DeltaE: %8.2" ICFLOATSFX "\n", eval.maxDE2);
1011 report += wxString::Format(" DE <= 1.0 (%8u): %5.1f%%\n\n", eval.num3, (float)eval.num3 / (float)eval.m_nTotal*100.0);
1012
1013 report += wxString::Format(" Max L, a, b: " ICFLOATFMT ", " ICFLOATFMT ", " ICFLOATFMT "\n", eval.maxLab2[0], eval.maxLab2[1], eval.maxLab2[2]);
1014
1015 if (prmg.m_nTotal) {
1016 report += wxString::Format("\n PRMG Interoperability - Round Trip Results\n");
1017 report += wxString::Format( " ------------------------------------------------------\n");
1018
1019 report += wxString::Format(" DE <= 1.0 (%8u): %5.1f%%\n", prmg.m_nDE1, (float)prmg.m_nDE1/(float)prmg.m_nTotal*100.0);
1020 report += wxString::Format(" DE <= 2.0 (%8u): %5.1f%%\n", prmg.m_nDE2, (float)prmg.m_nDE2/(float)prmg.m_nTotal*100.0);
1021 report += wxString::Format(" DE <= 3.0 (%8u): %5.1f%%\n", prmg.m_nDE3, (float)prmg.m_nDE3/(float)prmg.m_nTotal*100.0);
1022 report += wxString::Format(" DE <= 5.0 (%8u): %5.1f%%\n", prmg.m_nDE5, (float)prmg.m_nDE5/(float)prmg.m_nTotal*100.0);
1023 report += wxString::Format(" DE <=10.0 (%8u): %5.1f%%\n", prmg.m_nDE10, (float)prmg.m_nDE10/(float)prmg.m_nTotal*100.0);
1024 report += wxString::Format(" Total (%8u)\n", prmg.m_nTotal);
1025 }
1026
1027 report += "\n";
1028
1029 report += wxString::Format("Evaluation took %f seconds\n\n", (double)elapsed / (double)CLOCKS_PER_SEC);
1030
1031 return report;
1032}
@ icRelativeColorimetric
Definition icProfileHeader.h:1144
@ icInterpTetrahedral
Definition IccCmm.h:115
icStatusCMM
CMM return status values.
Definition IccCmm.h:90
@ icCmmStatOk
Definition IccCmm.h:92
#define ICFLOATFMT
Definition IccDefs.h:107
char icChar
Definition IccDefs.h:110
#define ICFLOATSFX
Definition IccDefs.h:106
Definition IccUtil.h:303
const icChar * GetRenderingIntentName(icRenderingIntent val, bool bIsV5=false)
Definition IccUtil.cpp:2091
icStatusCMM ICCPROFLIB_API EvaluateProfile(CIccProfile *pProfile, icUInt8Number nGran=0, icRenderingIntent nIntent=icUnknownIntent, icXformInterp nInterp=icInterpLinear, bool buseMpeTags=true)
Definition IccEval.cpp:82
Definition IccPrmg.h:82
icUInt32Number m_nTotal
Definition IccPrmg.h:96
icUInt32Number m_nDE2
Definition IccPrmg.h:96
icUInt32Number m_nDE1
Definition IccPrmg.h:96
icUInt32Number m_nDE3
Definition IccPrmg.h:96
icUInt32Number m_nDE5
Definition IccPrmg.h:96
bool m_bPrmgImplied
Definition IccPrmg.h:98
icUInt32Number m_nDE10
Definition IccPrmg.h:96
icStatusCMM EvaluateProfile(CIccProfile *pProfile, icRenderingIntent nIntent=icUnknownIntent, icXformInterp nInterp=icInterpLinear, bool buseMpeTags=true)
Definition IccPrmg.cpp:203
Definition iccRoundTrip.cpp:80
icFloatNumber maxLab2[3]
Definition iccRoundTrip.cpp:93
icFloatNumber minDE2
Definition iccRoundTrip.cpp:89
icFloatNumber maxLab1[3]
Definition iccRoundTrip.cpp:93
icUInt32Number num3
Definition iccRoundTrip.cpp:91
icFloatNumber minDE1
Definition iccRoundTrip.cpp:89
icUInt32Number m_nTotal
Definition iccRoundTrip.cpp:91
icFloatNumber maxDE2
Definition iccRoundTrip.cpp:90
icFloatNumber GetMean1()
Definition iccRoundTrip.cpp:86
icFloatNumber GetMean2()
Definition iccRoundTrip.cpp:87
icFloatNumber maxDE1
Definition iccRoundTrip.cpp:90

References CIccPRMG::EvaluateProfile(), icCmmStatOk, icInterpTetrahedral, and CIccPRMG::m_nTotal.

+ Here is the call graph for this function:

◆ IsRoundTripable()

static bool IsRoundTripable ( CIccProfile pIcc)
static
429{
430 icHeader *pHdr = &pIcc->m_Header;
431
432 if (pHdr->deviceClass == icSigLinkClass) {
433 return false;
434 }
435
436 if ((pIcc->FindTag(icSigAToB0Tag) && pIcc->FindTag(icSigBToA0Tag)) ||
437 (pIcc->FindTag(icSigAToB1Tag) && pIcc->FindTag(icSigBToA1Tag)) ||
438 (pIcc->FindTag(icSigAToB2Tag) && pIcc->FindTag(icSigBToA2Tag)) ||
439 (pIcc->FindTag(icSigDToB0Tag) && pIcc->FindTag(icSigBToD0Tag)) ||
440 (pIcc->FindTag(icSigDToB1Tag) && pIcc->FindTag(icSigBToD1Tag)) ||
441 (pIcc->FindTag(icSigDToB2Tag) && pIcc->FindTag(icSigBToD2Tag)) ||
442 (pIcc->FindTag(icSigRedMatrixColumnTag) && pIcc->FindTag(icSigGreenMatrixColumnTag) && pIcc->FindTag(icSigBlueMatrixColumnTag) &&
443 pIcc->FindTag(icSigRedTRCTag) && pIcc->FindTag(icSigGreenTRCTag) && pIcc->FindTag(icSigBlueTRCTag)))
444 return true;
445
446 return false;
447}
@ icSigLinkClass
Definition icProfileHeader.h:955
icProfileClassSignature deviceClass
Definition icProfileHeader.h:2047
@ icSigBToD0Tag
Definition icProfileHeader.h:408
@ icSigBToA2Tag
Definition icProfileHeader.h:376
@ icSigBlueMatrixColumnTag
Definition icProfileHeader.h:348
@ icSigGreenTRCTag
Definition icProfileHeader.h:424
@ icSigBToD2Tag
Definition icProfileHeader.h:410
@ icSigAToB0Tag
Definition icProfileHeader.h:342
@ icSigBToA1Tag
Definition icProfileHeader.h:375
@ icSigAToB2Tag
Definition icProfileHeader.h:344
@ icSigDToB0Tag
Definition icProfileHeader.h:404
@ icSigBToA0Tag
Definition icProfileHeader.h:374
@ icSigRedTRCTag
Definition icProfileHeader.h:463
@ icSigBToD1Tag
Definition icProfileHeader.h:409
@ icSigBlueTRCTag
Definition icProfileHeader.h:349
@ icSigGreenMatrixColumnTag
Definition icProfileHeader.h:423
@ icSigAToB1Tag
Definition icProfileHeader.h:343
@ icSigDToB2Tag
Definition icProfileHeader.h:406
@ icSigRedMatrixColumnTag
Definition icProfileHeader.h:462
@ icSigDToB1Tag
Definition icProfileHeader.h:405
Definition icProfileHeader.h:2043

Variable Documentation

◆ gs_nFrames

int gs_nFrames = 0
static

◆ my_children

wxList my_children

◆ my_frame

MyFrame* my_frame = (MyFrame *) NULL

◆ xpos

long xpos = -1
static

◆ ypos

long ypos = -1
static