コード例 #1
0
void CProfileDumpView::OnInitialUpdate()
{
  CIccProfile *pIcc = GetDocument()->m_pProfile;
  icHeader *pHdr = &pIcc->m_Header;
  CIccInfo Fmt;
  char buf[64];
  int n;

  m_sHdrAttributes = Fmt.GetDeviceAttrName(pHdr->attributes);
  m_sHdrCmm = icGetSig(buf, pHdr->cmmId);
  m_sHdrCreationDate.Format("%d/%d/%d  %02u:%02u:%02u",
                            pHdr->date.month, pHdr->date.day, pHdr->date.year,
                            pHdr->date.hours, pHdr->date.minutes, pHdr->date.seconds);
  m_sHdrCreator = icGetSig(buf, pHdr->creator);
  m_sHdrDataColorspace = Fmt.GetColorSpaceSigName(pHdr->colorSpace);
  m_sHdrFlags = Fmt.GetProfileFlagsName(pHdr->flags);
  m_sHdrPcsColorSpace = Fmt.GetColorSpaceSigName(pHdr->pcs);
  m_sHdrPlatform = Fmt.GetPlatformSigName(pHdr->platform);
  m_sHdrRenderingIntent = Fmt.GetRenderingIntentName((icRenderingIntent)(pHdr->renderingIntent));
  m_sHdrSize.Format("%d(0x%x) bytes", pHdr->size, pHdr->size);
  m_sHdrType = Fmt.GetProfileClassSigName(pHdr->deviceClass);
  m_sHdrVersion = Fmt.GetVersionName(pHdr->version);
  m_sHdrIlluminant.Format("X=%.4lf, Y=%.4lf, Z=%.4lf",
                          icFtoD(pHdr->illuminant.X),
                          icFtoD(pHdr->illuminant.Y),
                          icFtoD(pHdr->illuminant.Z));
  m_sHdrProfileID.Empty();
  for (n=0; n<16; n++) {
    sprintf(buf, "%02x", pHdr->profileID.ID8[n]);
    if (n && !(n%4))
      m_sHdrProfileID += " ";
    m_sHdrProfileID += buf;
  }

  CFormView::OnInitialUpdate();
  ResizeParentToFit(FALSE);

  m_listTags.InsertColumn(0, "Tag ID", LVCFMT_LEFT, 200);
  m_listTags.InsertColumn(1, "Offset", LVCFMT_RIGHT, 75);
  m_listTags.InsertColumn(2, "Size", LVCFMT_RIGHT, 75);

  int item;
  TagEntryList::iterator i;
  CString Text;

  for (n=0, i=pIcc->m_Tags->begin(); i!=pIcc->m_Tags->end(); i++, n++) {
    item = m_listTags.InsertItem(n, Fmt.GetTagSigName(i->TagInfo.sig));

    Text.Format("%d", i->TagInfo.offset);
    m_listTags.SetItemText(item, 1, Text);

    Text.Format("%d", i->TagInfo.size);
    m_listTags.SetItemText(item, 2, Text);

    m_listTags.SetItemData(item, (DWORD)i->TagInfo.sig);
  }

}
コード例 #2
0
void ShowHeader(CIccProfile *pIcc)
{
  icHeader *pHdr = &pIcc->m_Header;
  CIccInfo Fmt;
  icChar buf[64];

  printf("\nHeader\n");
  printf(  "------\n");
  printf("Profile Size:     %d(0x%x) bytes\n", pHdr->size, pHdr->size);
  
  if(Fmt.IsProfileIDCalculated(&pHdr->profileID))
    printf("Profile ID:        %s\n", Fmt.GetProfileID(&pHdr->profileID));
  else
    printf("Profile ID:       Profile ID not calculated.\n");
  printf("Attributes:       %s\n", Fmt.GetDeviceAttrName(pHdr->attributes));
  printf("Cmm:              %s\n", Fmt.GetCmmSigName((icCmmSignature)(pHdr->cmmId)));
  printf("Creation Date:    %d/%d/%d  %02u:%02u:%02u\n",
                            pHdr->date.month, pHdr->date.day, pHdr->date.year,
                            pHdr->date.hours, pHdr->date.minutes, pHdr->date.seconds);
  printf("Creator:          %s\n", icGetSig(buf, pHdr->creator));
  printf("Data Color Space: %s\n", Fmt.GetColorSpaceSigName(pHdr->colorSpace));
  printf("Flags             %s\n", Fmt.GetProfileFlagsName(pHdr->flags));
  printf("PCS Color Space:  %s\n", Fmt.GetColorSpaceSigName(pHdr->pcs));
  printf("Platform:         %s\n", Fmt.GetPlatformSigName(pHdr->platform));
  printf("Rendering Intent: %s\n", Fmt.GetRenderingIntentName((icRenderingIntent)(pHdr->renderingIntent)));
  printf("Type:             %s\n", Fmt.GetProfileClassSigName(pHdr->deviceClass));
  printf("Version:          %s\n", Fmt.GetVersionName(pHdr->version));
  printf("Illuminant:       X=%.4lf, Y=%.4lf, Z=%.4lf\n",
                          icFtoD(pHdr->illuminant.X),
                          icFtoD(pHdr->illuminant.Y),
                          icFtoD(pHdr->illuminant.Z));

  printf("\nProfile Tags\n");
  printf(  "------------\n");

  printf("%25s    ID    %8s\t%8s\n", "Tag", "Offset", "Size");
  printf("%25s  ------  %8s\t%8s\n", "----", "------", "----");

  TagEntryList::iterator i;

  for (i=pIcc->m_Tags->begin(); i!=pIcc->m_Tags->end(); i++) {
    printf("%25s  %s  %8d\t%8d\n", Fmt.GetTagSigName(i->TagInfo.sig),
                                     icGetSig(buf, i->TagInfo.sig, false), 
                                     i->TagInfo.offset, i->TagInfo.size);
  }

}
コード例 #3
0
ファイル: iccDumpProfile.cpp プロジェクト: ramzes2/RefIccMAX
int main(int argc, char* argv[])
{
  int nArg = 1;

  if (argc<=1) {
print_usage:
    printf("Usage: iccDumpProfile profile {tagId to dump/\"ALL\")\n");
    return -1;
  }

  CIccProfile *pIcc;
  std::string sReport;
  icValidateStatus nStatus;

  if (!strncmp(argv[1], "-V", 2) || !strncmp(argv[1], "-v", 2)) {
    if (argc<=2)
      goto print_usage;

    nArg = 2;

    pIcc = ValidateIccProfile(argv[nArg], sReport, nStatus);
  }
  else
    pIcc = OpenIccProfile(argv[nArg]);

  if (!pIcc) {
    printf("Unable to open '%s'\n", argv[nArg]);
  }
  else {
    icHeader *pHdr = &pIcc->m_Header;
    CIccInfo Fmt;
    char buf[64];

    printf("Profile:          '%s'\n", argv[nArg]);
    if(Fmt.IsProfileIDCalculated(&pHdr->profileID))
      printf("Profile ID:        %s\n", Fmt.GetProfileID(&pHdr->profileID));
    else
      printf("Profile ID:       Profile ID not calculated.\n");
    printf("Size:             %d(0x%x) bytes\n", pHdr->size, pHdr->size);

    printf("\nHeader\n");
    printf(  "------\n");
    printf("Attributes:       %s\n", Fmt.GetDeviceAttrName(pHdr->attributes));
    printf("Cmm:              %s\n", Fmt.GetCmmSigName((icCmmSignature)(pHdr->cmmId)));
    printf("Creation Date:    %d/%d/%d  %02u:%02u:%02u\n",
                              pHdr->date.month, pHdr->date.day, pHdr->date.year,
                              pHdr->date.hours, pHdr->date.minutes, pHdr->date.seconds);
    printf("Creator:          %s\n", icGetSig(buf, pHdr->creator));
    printf("Data Color Space: %s\n", Fmt.GetColorSpaceSigName(pHdr->colorSpace));
    printf("Flags             %s\n", Fmt.GetProfileFlagsName(pHdr->flags));
    printf("PCS Color Space:  %s\n", Fmt.GetColorSpaceSigName(pHdr->pcs));
    printf("Platform:         %s\n", Fmt.GetPlatformSigName(pHdr->platform));
    printf("Rendering Intent: %s\n", Fmt.GetRenderingIntentName((icRenderingIntent)(pHdr->renderingIntent)));
    printf("Type:             %s\n", Fmt.GetProfileClassSigName(pHdr->deviceClass));
    printf("Version:          %s\n", Fmt.GetVersionName(pHdr->version));
    printf("Illuminant:       X=%.4lf, Y=%.4lf, Z=%.4lf\n",
                            icFtoD(pHdr->illuminant.X),
                            icFtoD(pHdr->illuminant.Y),
                            icFtoD(pHdr->illuminant.Z));

    printf("\nProfile Tags\n");
    printf(  "------------\n");

    printf("%25s    ID    %8s\t%8s\n", "Tag", "Offset", "Size");
    printf("%25s  ------  %8s\t%8s\n", "----", "------", "----");

    int n;
    TagEntryList::iterator i;

    for (n=0, i=pIcc->m_Tags->begin(); i!=pIcc->m_Tags->end(); i++, n++) {
      printf("%25s  %s  %8d\t%8d\n", Fmt.GetTagSigName(i->TagInfo.sig),
                                   icGetSig(buf, i->TagInfo.sig, false), 
                                   i->TagInfo.offset, i->TagInfo.size);
    }

    if (argc>nArg+1) {
      if (!stricmp(argv[nArg+1], "ALL")) {
        for (n=0, i=pIcc->m_Tags->begin(); i!=pIcc->m_Tags->end(); i++, n++) {
          DumpTag(pIcc, i->TagInfo.sig);
        }
      }
      else {
        DumpTag(pIcc, (icTagSignature)icGetSigVal(argv[nArg+1]));
      }
    }
  }

  if (nArg>1) {
    printf("\nValidation Report\n");
    printf(  "-----------------\n");
    switch (nStatus) {
    case icValidateOK:
      printf("Profile is valid\n\n");
      break;
    case icValidateWarning:
      printf("Profile has warning(s)\n\n");
      break;
    case icValidateNonCompliant:
      printf("Profile violates ICC specification\n\n");
      break;
    case icValidateCriticalError:
      printf("Profile has Critical Error(s) that violate ICC specificaiton.\n\n");
      break;
    default:
      printf("Profile has unknown status.\n\n");
      break;
    }
    fwrite(sReport.c_str(), sReport.length(), 1, stdout);
  }

  delete pIcc;
  return 0;
}
コード例 #4
0
ファイル: iccRoundTrip.cpp プロジェクト: johngull/sampleicc
int main(int argc, char* argv[])
{
  int nArg = 1;

  if (argc<=1) {
    printf("Usage: iccRoundTrip profile {rendering_intent=1 {use_mpe=0}}\n");
    printf("  where rendering_intent is (0=perceptual, 1=relative, 2=saturation, 3=absolute)\n");
    return -1;
  }

  icRenderingIntent nIntent = icRelativeColorimetric;
  int nUseMPE = 0;

  if (argc>2) {
    nIntent = (icRenderingIntent)atoi(argv[2]);
    if (argc>3) {
      nUseMPE = atoi(argv[3]);
    }
  }

  CIccMinMaxEval eval;

  icStatusCMM stat = eval.EvaluateProfile(argv[1], 0, nIntent, icInterpLinear, (nUseMPE!=0));

  if (stat!=icCmmStatOk) {
    printf("Unable to perform round trip on '%s'\n", argv[1]);
    return -1;
  }

  CIccPRMG prmg;

  stat = prmg.EvaluateProfile(argv[1], nIntent, icInterpLinear, (nUseMPE!=0));

  if (stat!=icCmmStatOk) {
    printf("Unable to perform PRMG analysis on '%s'\n", argv[1]);
    return -1;
  }

  CIccInfo info;

  printf("Profile:          '%s'\n", argv[1]);
  printf("Rendering Intent: %s\n", info.GetRenderingIntentName(nIntent));
  printf("Specified Gamut:  %s\n", prmg.m_bPrmgImplied ? "Perceptual Reference Medium Gamut" : "Not Specified");

  printf("\nRound Trip 1\n");
  printf(  "------------\n");
  printf("Min DeltaE:    %8.2" ICFLOATSFX "\n", eval.minDE1);
  printf("Mean DeltaE:   %8.2" ICFLOATSFX "\n", eval.GetMean1());
  printf("Max DeltaE:    %8.2" ICFLOATSFX "\n\n", eval.maxDE1);

  printf("Max L, a, b:   " ICFLOATFMT ", " ICFLOATFMT ", " ICFLOATFMT "\n", eval.maxLab1[0], eval.maxLab1[1], eval.maxLab1[2]);

  printf("\nRound Trip 2\n");
  printf(  "------------\n");
  printf("Min DeltaE:    %8.2" ICFLOATSFX "\n", eval.minDE2);
  printf("Mean DeltaE:   %8.2" ICFLOATSFX "\n", eval.GetMean2());
  printf("Max DeltaE:    %8.2" ICFLOATSFX "\n\n", eval.maxDE2);

  printf("Max L, a, b:   " ICFLOATFMT ", " ICFLOATFMT ", " ICFLOATFMT "\n", eval.maxLab2[0], eval.maxLab2[1], eval.maxLab2[2]);

  if (prmg.m_nTotal) {
    printf("\nPRMG Interoperability - Round Trip Results\n");
    printf(  "------------------------------------------------------\n");

    printf("DE <= 1.0 (%8u): %5.1f%%\n", prmg.m_nDE1, (float)prmg.m_nDE1/(float)prmg.m_nTotal*100.0); 
    printf("DE <= 2.0 (%8u): %5.1f%%\n", prmg.m_nDE2, (float)prmg.m_nDE2/(float)prmg.m_nTotal*100.0);
    printf("DE <= 3.0 (%8u): %5.1f%%\n", prmg.m_nDE3, (float)prmg.m_nDE3/(float)prmg.m_nTotal*100.0);
    printf("DE <= 5.0 (%8u): %5.1f%%\n", prmg.m_nDE5, (float)prmg.m_nDE5/(float)prmg.m_nTotal*100.0);
    printf("DE <=10.0 (%8u): %5.1f%%\n", prmg.m_nDE10, (float)prmg.m_nDE10/(float)prmg.m_nTotal*100.0);
    printf("Total     (%8u)\n", prmg.m_nTotal);
  }
  return 0;
}