Uma imagem digital é um conjunto de dados que indicam as variações de vermelho (Red), verde (Green) e azul (Blue) num determinado local em uma grade de pixels, podendo ser representado por uma matriz de cores RGB, onde esses dados podem variar de 0 a 255.
Com base nessas informações da matriz de cores, podemos fazer algumas manipulações na imagem, seja modificando as cores e aplicando filtros, entre tantas outras que conseguimos fazer no Photoshop e demais editores de imagem.
Para exemplificar, vamos fazer a separação de cores RGB da imagem e trocar os valores dos canais. O Red vai receber o valor de Blue, o Green de Red e o Blue o valor de Green.
Para fazermos a troca de cores, percorremos toda a matriz (x, y) da imagem, verificamos a cor do pixel separando-a em seus respectivos tons e após isso, duplicamos na imagem chamando a função color() passando as cores trocadas:
void trocaDeCanais(){
for (int x = 0; x < img.width; x++ ) {
for (int y = 0; y < img.height; y++ ) {
int loc = x + y * img.width;
color pix = img.pixels[loc];
float r = red(pix);
float g = green(pix);
float b = blue(pix);
result.pixels[loc] = color(g, b, r);
}
}
}
Neste outro exemplo, fazemos uma pixelização da imagem, onde novamente percorreremos toda a imagem e adicionaremos a mesma cor em um determinado número de pixel na imagem de reprodução.
void pixelar(){
for (int x = 0; x < img.width; x += 20) {
for (int y = 0; y < img.height; y ++) {
int loc = x + y * img.width;
color pix = img.pixels[loc];
for (int i = loc; i < loc + 20; i++){
result.pixels[i] = pix;
}
}
}
}
Para visualizar o código completo,
baixe aqui