Advertisement
Guest User

Untitled

a guest
May 28th, 2015
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. BEGIN_PROCESSING();
  2.  
  3. int nrImages1 = 0;
  4.  
  5. int* h1r = new int[256];
  6. int* h1g = new int[256];
  7. int* h1b = new int[256];
  8. float SAD = 32000;
  9. int imgid=0;
  10.  
  11. for (int k = 0; k < 256; k++)
  12. h1r[k] = h1g[k] = h1b[k] = 0;
  13.  
  14. for (int i = 0; i<dwHeight; i++)
  15. for (int j = 0; j < dwWidth; j++)
  16.  
  17. {
  18. int k = lpSrc[i*w + j];
  19. h1r[bmiColorsSrc[k].rgbRed]++;
  20. h1g[bmiColorsSrc[k].rgbGreen]++;
  21. h1b[bmiColorsSrc[k].rgbBlue]++;
  22. }
  23.  
  24.  
  25. BYTE *lpSI, *lpSrcI;
  26. DWORD dwWidthI, dwHeightI, wI;
  27. HDIB hBmpSrcI;
  28. CFile fileIn;
  29. CFileException fE;
  30. AfxEnableControlContainer();
  31. BROWSEINFO rBI = { 0 };
  32. rBI.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI;
  33. //rBI.lpszTitle = L"Select Folder for Output Files";
  34. TCHAR szPath[MAX_PATH];
  35. LPITEMIDLIST pidl = SHBrowseForFolder(&rBI);
  36. if (pidl != NULL) { // else, user canceled
  37. BOOL fRet = SHGetPathFromIDList(pidl, szPath);
  38. }
  39. char directoryPath[MAX_PATH];
  40. CFileFind finder;
  41. CString msg;
  42.  
  43. // build a string with wildcards
  44. CString strWildcard(szPath);
  45. strWildcard += _T("\\*.bmp");
  46.  
  47. BOOL bWorking = finder.FindFile(strWildcard);
  48.  
  49. while (bWorking)
  50. {
  51. nrImages1++;
  52. bWorking = finder.FindNextFile();
  53. CString fnIn = finder.GetFilePath();
  54. fileIn.Open(fnIn, CFile::modeRead | CFile::shareDenyWrite, &fE);
  55. hBmpSrcI = (HDIB)::ReadDIBFile(fileIn);
  56. fileIn.Close();
  57. lpSI = (BYTE*)::GlobalLock((HGLOBAL)hBmpSrcI);
  58. dwWidthI = ::DIBWidth((LPSTR)lpSI);
  59. dwHeightI = ::DIBHeight((LPSTR)lpSI);
  60. lpSrcI = (BYTE*)::FindDIBBits((LPSTR)lpSI);
  61. DWORD wI = WIDTHBYTES(dwWidthI * 8);
  62. ///////////// DO THE PROCESING WITH THE CURRENT IMAGE IN CLASS 1
  63.  
  64. //
  65. int* h2r = new int[256];
  66. int* h2g = new int[256];
  67. int* h2b = new int[256];
  68. float SAD2 = 0;
  69. float sdifr = 0;
  70. float sdifg = 0;
  71. float sdifb = 0;
  72.  
  73. for (int k = 0; k < 256; k++)
  74. h2r[k] = h2g[k] = h2b[k] = 0;
  75.  
  76. for (int i = 0; i<dwHeightI; i++)
  77. for (int j = 0; j < dwWidthI; j++)
  78. {
  79. int k = lpSrcI[i*w + j];
  80. h2r[bmiColorsSrc[k].rgbRed]++;
  81. h2g[bmiColorsSrc[k].rgbGreen]++;
  82. h2b[bmiColorsSrc[k].rgbBlue]++;
  83. }
  84. for (int i = 0; i < 256; i++)
  85. {
  86. sdifr += abs(h1r[i] - h2r[i]);
  87. sdifg += abs(h1g[i] - h2g[i]);
  88. sdifb += abs(h1b[i] - h2b[i]);
  89. }
  90.  
  91. SAD2 = (sdifr / 256 + sdifg / 256 + sdifb / 256)/3;
  92.  
  93. if (SAD2 < SAD)
  94. {
  95. SAD=SAD2;
  96. imgid=nrImages1;
  97. }
  98. //
  99.  
  100. ::GlobalUnlock((HGLOBAL)hBmpSrcI);
  101. }
  102. msg.Format(_T("Found and processed %d images"), nrImages1);
  103. AfxMessageBox(msg);
  104.  
  105. //CString msg;
  106. msg.Format(_TEXT("Most similar image: %d"),imgid);
  107. AfxMessageBox(msg);
  108.  
  109. END_PROCESSING("");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement