getRGB

8 respostas
A

dae galera

to usando o getRGB da classe BufferedImage

ta dando certo, to pegando o rgb perfeitamente e ateh separando os rgbs em variaveis distintas:

int r;

int g;

int b;

a duvida agora eh como descobrir c esse rgb eh escuro… hehehe q pergunta hein!!!

poiseh, ja fiz varios testes e pesquisei um pouco, nao segue um padrao, ou pelo menos nao identifiquei.

agradeço a todos, abraço

8 Respostas

V

Escuro é próximo do preto. Preto é 0,0,0.
Portanto, seus valores de R, G e B terão de ser baixos.

V

Vê se entende olhando isso:

255 R = Vermelho
255 G = Verde
255 B = Azul
255 R + 255 G = Vermelho + Verde = Amarelo
255 G + 255 B = Verde + Azul = Ciano (tipo, azul céu)
255 R + 255 B = Vermelho + Azul = Magenta (um cor-de-rosa pink bem forte)
255 R + 255 G + 255 B = Vermelho + Verde + Azul = Branco (branco é a soma de todas as cores)
128 R = Vermelho escuro (metade do vermelho)
128 G = Verde escuro (metade do verde)
128 B = Azul escuro (metade do azul)
0 R + 0 G + 0 B = Preto (não há cor nenhuma)
128 R + 128 G + 128 B = Cinza (metade do branco)
192 R + 192 G + 192 B = Cinza claro (três quartos do branco)
64 R + 64 G + 64 B = Cinza escuro (um quarto do branco)
255 R + 128 G = Laranja
128 R + 255 B = Roxo
128 R + 64 G + 64 B = Marrom
128 R + 128 G + 255B = Azul claro (Metade do caminho entre azul e branco)
255 R + 128 G + 255B = cor-de-rosa (Metade do caminho entre magenta e branco)

Ou seja, você consegue achar esses valores misturando as cores vermelho, verde e azul. 0 é a ausência da cor, 255 é ela na mais forte intensidade possível, valores entre 1 e 254 são intensidades de cor intermediárias.

L
Fera, não é uma pergunta tosca, nem difícil. É só raciocinar. Recentemente eu precisei implementar um método que permitisse o usuário alterar as cores de imagens, daí tive que pensar também no que você está precisando para escrever na imagem com cor clara ou escura dependendo da tonalidade da região. Gastei quase um dia inteiro pensando e quando fui dormir eu pensei em frações de segundos o que não havia pensado o dia inteiro; sentei na frente do pc e digitei a ideia, e pronto! Funcionou... Não sei se é uma forma correta de se fazer, mas funciona, e é matematicamente correta, rsrsrs... Segue:
int red = r;
int green = g;
int blue = b;

// depois de capturar cada cor (red, gree, blue) faz a verificação...

if (((red + green) >= 255 &&  blue >= 127) || ((red + blue) >= 255 &&  green >= 127) || ((blue + green) >= 255 &&  red >= 127)) {
    JOptionPane.showMessageDialgo(null, "O espaço rgb é escuro");
}
else {
    JOptionPane.showMessageDialgo(null, "O espaço rgb é claro");
}
Na verdade, definindo só como "claro" e "escuro", visualmente as vezes discordamos das cores, mas dizem que a matemática é exata, fazer o que!? rsrsrs...

Tente aí e me diz se é isso...
Um abraço!

V

Você pode fazer isso:

float intensidade = (r * 0.29 + g * 0.6 + b * 0.11) / 255.0
boolean claro = intensidade >= 0.5;

Explicando, as cores não têm a mesma intesidade. O verde puro é muito brilhante, o vermelho puro é mais ou menos e o azul puro é escuro. Por isso que a participação na intensidade é diferente (29%, 60% e 11%). Eu vi esses valores em um lugar a uns anos atrás, mas infelizmente não lembro aonde.

D

Humm…

Desculpem a ignorância, faz muito tempo que não faço nada na área de processamento de imagem, mas quando fiz a disciplina dessa área, a classificação da imagem em clara ou escura era obtida pela concentração dos ponto em um histograma…

isso mudou? o que vocês apresentaram como sugestões, estão baseada em alguma literatura?

Como ela se comporta em uma imagem de tons de cinza que faz o degrade de 0 a 255? digamos em faixa de tons de mesmo tamanho…

Na época em que estudei o Gonzalez era a referência…

Segue um exemplo, da Sun: http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/Analysis.doc.html#54836

fw

http://compare.buscape.com.br/processamento-de-imagens-digitais-gonzales-rafael-c-[telefone removido].html

V

A questão é saber se a cor do pixel é clara ou escura, e não a imagem como um todo.
Mas, você está absolutamente certo.

L

victorwss:
Você pode fazer isso:

float intensidade = (r * 0.29 + g * 0.6 + b * 0.11) / 255.0
boolean claro = intensidade >= 0.5;

Explicando, as cores não têm a mesma intesidade. O verde puro é muito brilhante, o vermelho puro é mais ou menos e o azul puro é escuro. Por isso que a participação na intensidade é diferente (29%, 60% e 11%). Eu vi esses valores em um lugar a uns anos atrás, mas infelizmente não lembro aonde.

Caramba! Muito bom, cara! Minha forma “genérica”, que citei acima, deu pra quebrar o galho quando precisei, mas realmente tive problemas com a intensidade, e sabendo dessa, na próxima vou desenvolver um coding melhor, rsrs…

A

victorwss o seu código parece estar funcionando perfeitamente, ja testei várias cores e ateh agora concordo com a resposta (claro ou escuro)

bom… acho q está solucionado, até q alguém descubra um problema…

agradeço a todos :wink:

abraços

Criado 15 de outubro de 2008
Ultima resposta 16 de out. de 2008
Respostas 8
Participantes 5