Advertisement
Guest User

Exemplo acessando RGB

a guest
Aug 24th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. //Streching RGB - Lucas Loezer
  2. void CPDIBase::StretchingRGB()
  3. {
  4. /*
  5. ~~ Anotações ~~
  6. RGB vai de 0 a 255
  7. a = valor mínimo desejado
  8. b = valor máximo desejado
  9. minR = valor minimo de R
  10. minG = valor minimo de G
  11. minB = valor minimo de B
  12. maxR = valor máximo de R
  13. maxG = valor máximo de G
  14. maxB = valor máximo de B
  15. min = menor valor da imagem
  16. max = maior valor da imagem
  17. newR = Novo valor de R
  18. newG = Novo valor de G
  19. newB = Novo valor de B
  20. */
  21.  
  22. int lin, col, a = 0, b = 255, R = 0, G = 0, B = 0;
  23. float maxR = 0, minR = 10000, maxG = 0, minG = 1000, maxB = 0, minB = 1000, newR, newB, newG, min = 2000, max = 0;
  24. BYTE * lpTemp = lpBits;
  25. lpTemp = lpBits;
  26. //Conversão para RGB
  27. for (lin = 0; lin<(int)GetHeight(); lin++)
  28. {
  29. for (col = 0; col<(int)GetWidth(); col++)
  30. {
  31. B = lpTemp[lin*bmWidthBytes + col * 3 + 0];
  32. G = lpTemp[lin*bmWidthBytes + col * 3 + 1];
  33. R = lpTemp[lin*bmWidthBytes + col * 3 + 2];
  34.  
  35. //Armazena os maiores e menores valores da ibagem
  36. //Maior e menor valor de R, G e B
  37. if (R > maxR)
  38. {
  39. maxR = R;
  40. }
  41. else if (R < minR)
  42. {
  43. minR = R;
  44. }
  45. if (G > maxG)
  46. {
  47. maxG = G;
  48. }
  49. else if (G < minG)
  50. {
  51. minG = G;
  52. }
  53. if (B > maxB)
  54. {
  55. maxB = B;
  56. }
  57. else if (B < minB)
  58. {
  59. minB = B;
  60. }
  61.  
  62. }
  63. }
  64. //Salvando o maior valor da imagem.
  65. if (maxR >= maxB && maxR >= maxG)
  66. max = maxR;
  67. else if (maxB >= maxR && maxB >= maxG)
  68. max = maxB;
  69. else if (maxG >= maxR && maxG >= maxB)
  70. max = maxG;
  71. //Salvando o menor valor da imagem.
  72. if (minR <= minB && minR <= minG)
  73. min = minR;
  74. else if (minB <= minG && minB <= minR)
  75. min = minB;
  76. else if (minG <= minB && minG <= minR)
  77. min = minG;
  78.  
  79.  
  80. //Aplicação do Stretching - Alterado para ficar semelhante ao do artigo
  81.  
  82. for (lin = 0; lin < (int)GetHeight(); lin++)
  83. for (col = 0; col < (int)GetWidth(); col++)
  84. {
  85.  
  86. newB = (lpTemp[lin*bmWidthBytes + col * 3 + 0] - minB) * ((max - min) / (maxB - minB)) + a;
  87. lpTemp[lin*bmWidthBytes + col * 3 + 0] = (BYTE)newB;
  88. newG = (lpTemp[lin*bmWidthBytes + col * 3 + 1] - minG) * ((max - min) / (maxG - minG)) + a;
  89. lpTemp[lin*bmWidthBytes + col * 3 + 1] = (BYTE)newG;
  90. newR = (lpTemp[lin*bmWidthBytes + col * 3 + 2] - minR) * ((max - min) / (maxR - minR)) + a;
  91. lpTemp[lin*bmWidthBytes + col * 3 + 2] = (BYTE)newR;
  92.  
  93. }
  94.  
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement