Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Streching RGB - Lucas Loezer
- void CPDIBase::StretchingRGB()
- {
- /*
- ~~ Anotações ~~
- RGB vai de 0 a 255
- a = valor mínimo desejado
- b = valor máximo desejado
- minR = valor minimo de R
- minG = valor minimo de G
- minB = valor minimo de B
- maxR = valor máximo de R
- maxG = valor máximo de G
- maxB = valor máximo de B
- min = menor valor da imagem
- max = maior valor da imagem
- newR = Novo valor de R
- newG = Novo valor de G
- newB = Novo valor de B
- */
- int lin, col, a = 0, b = 255, R = 0, G = 0, B = 0;
- float maxR = 0, minR = 10000, maxG = 0, minG = 1000, maxB = 0, minB = 1000, newR, newB, newG, min = 2000, max = 0;
- BYTE * lpTemp = lpBits;
- lpTemp = lpBits;
- //Conversão para RGB
- for (lin = 0; lin<(int)GetHeight(); lin++)
- {
- for (col = 0; col<(int)GetWidth(); col++)
- {
- B = lpTemp[lin*bmWidthBytes + col * 3 + 0];
- G = lpTemp[lin*bmWidthBytes + col * 3 + 1];
- R = lpTemp[lin*bmWidthBytes + col * 3 + 2];
- //Armazena os maiores e menores valores da ibagem
- //Maior e menor valor de R, G e B
- if (R > maxR)
- {
- maxR = R;
- }
- else if (R < minR)
- {
- minR = R;
- }
- if (G > maxG)
- {
- maxG = G;
- }
- else if (G < minG)
- {
- minG = G;
- }
- if (B > maxB)
- {
- maxB = B;
- }
- else if (B < minB)
- {
- minB = B;
- }
- }
- }
- //Salvando o maior valor da imagem.
- if (maxR >= maxB && maxR >= maxG)
- max = maxR;
- else if (maxB >= maxR && maxB >= maxG)
- max = maxB;
- else if (maxG >= maxR && maxG >= maxB)
- max = maxG;
- //Salvando o menor valor da imagem.
- if (minR <= minB && minR <= minG)
- min = minR;
- else if (minB <= minG && minB <= minR)
- min = minB;
- else if (minG <= minB && minG <= minR)
- min = minG;
- //Aplicação do Stretching - Alterado para ficar semelhante ao do artigo
- for (lin = 0; lin < (int)GetHeight(); lin++)
- for (col = 0; col < (int)GetWidth(); col++)
- {
- newB = (lpTemp[lin*bmWidthBytes + col * 3 + 0] - minB) * ((max - min) / (maxB - minB)) + a;
- lpTemp[lin*bmWidthBytes + col * 3 + 0] = (BYTE)newB;
- newG = (lpTemp[lin*bmWidthBytes + col * 3 + 1] - minG) * ((max - min) / (maxG - minG)) + a;
- lpTemp[lin*bmWidthBytes + col * 3 + 1] = (BYTE)newG;
- newR = (lpTemp[lin*bmWidthBytes + col * 3 + 2] - minR) * ((max - min) / (maxR - minR)) + a;
- lpTemp[lin*bmWidthBytes + col * 3 + 2] = (BYTE)newR;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement